代码之家  ›  专栏  ›  技术社区  ›  LetMeSOThat4U

在Python Tk应用程序中调整列表框的大小

  •  1
  • LetMeSOThat4U  · 技术社区  · 8 年前

    #!/usr/bin/env python
    
    import Tkinter
    import ttk
    import datetime
    
    from Tkinter import Tk, Frame, Entry, Button, Listbox, N, S, E, W
    
    class TkPersonalActivityLog(object):
    
        def __init__(self):
            pass
    
        def configure_window(self, root):
    
            root.grid_columnconfigure(0, weight=1)
            root.grid_rowconfigure(0, weight=1)
            root.grid_rowconfigure(1, weight=1)
            root.grid_rowconfigure(2, weight=2)
    
            self.frame = Frame(root)
            self.frame.grid(sticky=N+E+S+W)
            self.frame.grid_columnconfigure(0, weight=2)
            self.frame.grid_rowconfigure(0, weight=2)
            self.frame.grid_rowconfigure(1, weight=2)
            self.frame.grid_rowconfigure(2, weight=2)
    
            self.entry = Entry(self.frame, bg='#e3ecfc')
            self.entry.grid(row=0, sticky=E+W)
            self.entry.focus_set()
    
            self.savebutton = Button(self.frame, text="Save and Minimize", fg="Black", command=self.cb_save_button)
            self.savebutton.grid(row=1)
    
            self.history = Listbox(self.frame)
            self.history.grid(row=2,sticky=N+S+E+W)
    
        def cb_save_button(self):
            act = (datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'), self.entry.get())
            self.history.insert(0, ' '.join(act))
    
        def mainloop(self):
            self.root = Tk()
            self.configure_window(self.root)
            self.root.mainloop()
    
    
    if __name__ == '__main__':
        main = TkPersonalActivityLog()
        main.mainloop()
    

    我想要 self.history 在调整整个窗口的大小时,将其调整到窗口的底部。事实上,它并没有这样做:

    enter image description here

    底部 窗户的边缘。

    sticky=N+S+E+W ?

    1 回复  |  直到 8 年前
        1
  •  2
  •   Mike - SMT    8 年前

    如果你只是将Tkinter作为tk导入,你可以省去一些头痛。

    尝试更改此选项:

    from Tkinter import Tk, Frame, Entry, Button, Listbox, N, S, E, W
    

    Import Tkinter as Tk
    

    此外,您不需要导入 N, S, E, W sticky = "nsew" 效果与 sticky = N+S+E+W 您的主要问题不是列表框没有填充框架,而是您的 self.frame 未填充根窗口。

    首先,让我们删除所有无用的权重。因为你的 只被放置在 row=0, column=0 而且根窗口中没有其他小部件,因此不需要为其他行/列提供权重。

    root.grid_columnconfigure(0, weight=1)
    root.grid_rowconfigure(0, weight=1)
    root.grid_rowconfigure(1, weight=1)
    root.grid_rowconfigure(2, weight=2)
    

    收件人:

    root.grid_rowconfigure(0, weight=1)
    root.grid_columnconfigure(0, weight=1)
    

    然后,让我们更改帧的权重,以便列表框展开。

    self.frame.grid_columnconfigure(0, weight=2)
    self.frame.grid_rowconfigure(0, weight=2)
    self.frame.grid_rowconfigure(1, weight=2)
    self.frame.grid_rowconfigure(2, weight=2)
    

    收件人:

    self.frame.grid_columnconfigure(0, weight=1)
    self.frame.grid_rowconfigure(2, weight=1)
    

    这应该可以解决您的大小调整问题。

    enter image description here

    #!/usr/bin/env python
    
    import Tkinter as tk
    import datetime
    
    class TkPersonalActivityLog(object):
    
        def __init__(self, root):
            self.master = root
            self.master.rowconfigure(0, weight=1)
            self.master.columnconfigure(0, weight=1)
    
            self.frame = tk.Frame(self.master)
            self.frame.grid(sticky="nsew")
            self.frame.grid_columnconfigure(0, weight=1)
            self.frame.grid_rowconfigure(2, weight=1)
    
            self.entry = tk.Entry(self.frame, bg='#e3ecfc')
            self.entry.grid(row=0, sticky="ew")
            self.entry.focus_set()
    
            self.savebutton = tk.Button(self.frame, text="Save and Minimize", fg="Black", command=self.cb_save_button)
            self.savebutton.grid(row=1)
    
            self.history = tk.Listbox(self.frame)
            self.history.grid(row=2,sticky="nsew")
    
        def cb_save_button(self):
            act = (datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'), self.entry.get())
            self.history.insert(0, ' '.join(act))
    
    
    if __name__ == '__main__':
        root = tk.Tk()
        main = TkPersonalActivityLog(root)
        root.mainloop()
    

    此代码较短,通过使用 import Tkinter as Tk .

    推荐文章