Python:tk入门,小部件没有在网格上调整大小?

时间:2014-09-19 18:26:40

标签: python tkinter resize tk grid-layout

我刚刚开始使用Python Tkinter / ttk,而且在使用网格布局时,我的小部件调整大小时遇到​​问题。这是我的代码的一个子集,它表现出与完整代码相同的问题(我意识到这个子集非常简单,我可能最好使用pack代替grid ,但我认为这将有助于切入主要问题,一旦我理解,我可以在我的完整程序中的任何地方修复它:

import Tkinter as tk
import ttk

class App(tk.Frame):
    def __init__(self, master):
        tk.Frame.__init__(self, master)

        # Create my widgets
        self.tree = ttk.Treeview(self)
        ysb = ttk.Scrollbar(self, orient='vertical', command=self.tree.yview)
        xsb = ttk.Scrollbar(self, orient='horizontal', command=self.tree.xview)
        self.tree.configure(yscroll=ysb.set, xscroll=xsb.set)
        self.tree.heading('#0', text='Path', anchor='w')

        # Populate the treeview (just a single root node for this simple example)
        root_node = self.tree.insert('', 'end', text='Test', open=True)

        # Lay it out on a grid so that it'll fill the width of the containing window.
        self.tree.grid(row=0, column=0, sticky='nsew')
        self.tree.columnconfigure(0, weight=1)
        ysb.grid(row=0, column=1, sticky='nse')
        xsb.grid(row=1, column=0, sticky='sew')
        self.grid()
        master.columnconfigure(0, weight=1)
        self.columnconfigure(0, weight=1)

app = App(tk.Tk())
app.mainloop()

我想这样做,以便我的树视图填充它所在窗口的整个宽度,而树视图只是居中在窗口的中间。

1 个答案:

答案 0 :(得分:3)

执行sticky时,请尝试指定self.grid参数。没有它,框架不会在窗口时调整大小。您还需要rowconfigure掌握和自我,就像您columnconfigure一样。

    #rest of code goes here...
    xsb.grid(row=1, column=0, sticky='sew')
    self.grid(sticky="nesw")
    master.columnconfigure(0, weight=1)
    master.rowconfigure(0,weight=1)
    self.columnconfigure(0, weight=1)
    self.rowconfigure(0, weight=1)

或者,不是对框架进行网格化,而是pack,并指定它填充它占据的空间。由于Frame是Tk中唯一的小部件,因此packgrid无关紧要。

    #rest of code goes here...
    xsb.grid(row=1, column=0, sticky='sew')
    self.pack(fill=tk.BOTH, expand=1)
    self.columnconfigure(0, weight=1)
    self.rowconfigure(0, weight=1)