我在一个框架内有一个 TreeView ,该框架位于另一个包含按钮的框架的顶部。我希望在调整窗口大小时顶部框架能够展开,但要防止按钮框架执行相同的操作。
Python 2.7.5 中的代码:
class MyWindow(Tk.Toplevel, object):
def __init__(self, master=None, other_stuff=None):
super(MyWindow, self).__init__(master)
self.other_stuff = other_stuff
self.master = master
self.resizable(True, True)
self.grid_columnconfigure(0, weight=1)
self.grid_rowconfigure(0, weight=1)
# Top Frame
top_frame = ttk.Frame(self)
top_frame.grid(row=0, column=0, sticky=Tk.NSEW)
top_frame.grid_columnconfigure(0, weight=1)
top_frame.grid_rowconfigure(0, weight=1)
top_frame.grid_rowconfigure(1, weight=1)
# Treeview
self.tree = ttk.Treeview(top_frame, columns=('Value'))
self.tree.grid(row=0, column=0, sticky=Tk.NSEW)
self.tree.column("Value", width=100, anchor=Tk.CENTER)
self.tree.heading("#0", text="Name")
self.tree.heading("Value", text="Value")
# Button Frame
button_frame = ttk.Frame(self)
button_frame.grid(row=1, column=0, sticky=Tk.NSEW)
button_frame.grid_columnconfigure(0, weight=1)
button_frame.grid_rowconfigure(0, weight=1)
# Send Button
send_button = ttk.Button(button_frame, text="Send",
command=self.on_send)
send_button.grid(row=1, column=0, sticky=Tk.SW)
send_button.grid_columnconfigure(0, weight=1)
# Close Button
close_button = ttk.Button(button_frame, text="Close",
command=self.on_close)
close_button.grid(row=1, column=0, sticky=Tk.SE)
close_button.grid_columnconfigure(0, weight=1)
我在其他地方创建实例,如下所示:
window = MyWindow(master=self, other_stuff=self._other_stuff)
我尝试过的: 尝试锁定可调整大小,这只会使按钮消失。我也尝试过改变权重,但我当前的配置是所有内容显示在屏幕上的唯一方式。
提前致谢。
最佳答案
问题不在于按钮框架正在增长,而在于顶部框架正在增长但没有使用其所有空间。这是因为您为 top_frame
的第 1 行赋予了 1 的权重,但您没有在第 1 行中放置任何内容。由于其权重,额外的空间被分配给第 1 行,但第 1 行是空的。
一种简单的可视化方法是将 top_frame
更改为 tk(而不是 ttk)框架,并暂时为其赋予独特的背景颜色。您将看到,当您调整窗口大小时,top_frame
会填充整个窗口,但它部分是空的。
像这样创建top_frame
:
top_frame = Tk.Frame(self, background="pink")
...当您调整窗口大小时,会生成如下图所示的屏幕。请注意,粉色 top_frame
已显示出来,而 button_frame
仍保持其首选大小。
您只需删除这一行代码即可解决此问题:
top_frame.grid_rowconfigure(1, weight=1)
关于python - 使用 Tkinter/ttk 垂直展开一个小部件,同时锁定另一个小部件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46493256/