0

我构建了一个显示一些标签、一个输入字段和一个按钮的窗口。该按钮打开一个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)
4

1 回答 1

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 留空。它的宽度 = const = 0。算了吧。
Select不附加到Entry. 第 1 列和第 2 列将它们分开。Select附加到#0 列的右边缘。
当您更新时,Label您会增加 #2 列的宽度 => 您会增加 #0 ( Select) 和 #3 ( Entry) 之间的空间。Select保持连接到#0 的右边缘。

于 2013-05-03T12:26:46.580 回答