我建了一个窗口,显示一些标签,一个输入字段和一个按钮。该按钮会打开tkinter.filedialog.askdirectory()
。选择目录并关闭对话框后,另一个标签会随文本条目一起更新。
问题是在发生这种情况之后,文本条目的描述(左边的另一个标签)在其单元格中重新排列。我不知道为什么会发生这种情况,是否有任何我不知道的幕后行为?
以下是我使用的示例代码。
from tkinter import *
from tkinter import filedialog
from tkinter import ttk
def folderDiag():
scanfolder.set(filedialog.askdirectory())
c = (N, W, S, E)
scanfolder = StringVar()
root = Tk()
root.title("Testing")
root.columnconfigure(0, weight=1)
root.rowconfigure(0, weight=1)
frame = ttk.Frame(root, padding="3")
frame.grid(column=0, row=0, sticky=c)
frame.columnconfigure(0, weight=1)
frame.columnconfigure(1, weight=1)
frame.columnconfigure(2, weight=1)
frame.rowconfigure(0, weight=1)
frame.rowconfigure(1, weight=1)
frame.rowconfigure(2, weight=1)
ttk.Label(frame, text="Welcome!",
font="TkDefaultFont 24 bold").grid(column=0, row=0, columnspan=4,
sticky=c)
# This label will be centered after dialog is closed
ttk.Label(frame, text="Select folder to scan:").grid(column=0, row=1, sticky=E)
ttk.Label(frame, textvariable=scanfolder).grid(column=2, row=2)
scan_folder_entry = ttk.Entry(frame, textvariable=scanfolder).grid(column=3,
row=1)
browse_button = ttk.Button(frame, text="Browse...",
command=folderDiag).grid(column=4, row=1)
root.mainloop()
exit(1)
答案 0 :(得分:1)
如果我理解正确,你需要这个:
| 0 | 1 | 2 | # Column number
| Welcome! |
| Select | Entry | Button |
| Your label |
所以:
from tkinter import *
from tkinter import filedialog
from tkinter import ttk
def folderDiag():
scanfolder.set(filedialog.askdirectory())
root = Tk()
c = (N, W, S, E)
scanfolder = StringVar()
root.title("Testing")
root.columnconfigure(0, weight=1)
root.rowconfigure(0, weight=1)
frame = ttk.Frame(root, padding="3")
frame.grid(column=0, row=0, sticky=c)
frame.columnconfigure(0, weight=0)
frame.columnconfigure(1, weight=1)
frame.columnconfigure(2, weight=0)
frame.rowconfigure(0, weight=1)
frame.rowconfigure(1, weight=1)
frame.rowconfigure(2, weight=1)
ttk.Label(frame, text="Welcome!",
font="TkDefaultFont 24 bold").grid(column=0, row=0, columnspan=3,
sticky=c)
ttk.Label(frame, text="Select folder to scan:").grid(column=0, row=1, sticky=E)
ttk.Label(frame, textvariable=scanfolder, justify=LEFT).grid(column=0, columnspan=3, row=2, sticky=W)
scan_folder_entry = ttk.Entry(frame, textvariable=scanfolder)
scan_folder_entry.grid(column=1, row=1, sticky=EW)
browse_button = ttk.Button(frame, text="Browse...",
command=folderDiag)
browse_button.grid(column=2, row=1)
root.mainloop()
您的代码创建了此布局:
| 0 | 1 | 2 | 3 | 4 |
| Welcome | --- |
| Select | - | --- | Entry | Button |
| --- | - | Label | --- | --- |
出于某种原因,你将#1留空。它的宽度=常数= 0.忘了它。
Select
未附加Entry
。第1列和第2列将它们分开。 Select
附加在#0列的右边缘
更新Label
后,您需要增加#2列的宽度=>你增加了#0(Select
)和#3(Entry
)之间的空间。 Select
保持与#0的右边缘相连。