python - 使用 Tkinter/ttk 垂直展开一个小部件,同时锁定另一个小部件

标签 python tkinter widget treeview ttk

我在一个框架内有一个 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)

我尝试过的: 尝试锁定可调整大小,这只会使按钮消失。我也尝试过改变权重,但我当前的配置是所有内容显示在屏幕上的唯一方式。

无论高度多长,它应该始终是什么样子: When it first launches

我想阻止什么: enter image description here

提前致谢。

最佳答案

问题不在于按钮框架正在增长,而在于顶部框架正在增长但没有使用其所有空间。这是因为您为 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 仍保持其首选大小。

screenshot showing colored empty space

您只需删除这一行代码即可解决此问题:

top_frame.grid_rowconfigure(1, weight=1)

关于python - 使用 Tkinter/ttk 垂直展开一个小部件,同时锁定另一个小部件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46493256/

相关文章:

python - Tkinter 获取图像以跟随光标并进行先前的移动

python - 将集合设置为全局集合的内容

Python:如何在消息框中获取输入框?

python - Python 是解释的,还是编译的,或者两者兼而有之?

python - 查找给定大小的每个连续子数组的最大值

python - Tkinter Canvas 问题

Python:使用 Tkinter 时脚本不退出

unit-testing - Flutter:如何测试 Widgets State 类中的方法?

java - 寻找java的旋转小部件

python - Tkinter 文本小部件。取消选择文本