在下面的代码中,如果我不使用 pack(),小部件不会显示,但 grid 和 pack 不应该在同一个类中使用。不使用pack如何正确编写这个?
#!/usr/bin/python3.9
import tkinter as tk
from tkinter import ttk
class MainFrame(ttk.Frame):
def __init__(self, container):
super().__init__(container)
pad={'padx': 40, 'pady': 80}
# login button
login_button = ttk.Button(self, text="Login")
login_button.grid(column=0, row=0, **pad)
login_button = ttk.Button(self, text="Login")
login_button.grid(column=1, row=0, **pad)
login_button = ttk.Button(self, text="Login")
login_button.grid(column=2, row=0, **pad)
login_button = ttk.Button(self, text="Login")
login_button.grid(column=3, row=0, **pad)
self.pack()
class App(tk.Tk):
def __init__(self):
super().__init__()
self.geometry("1200x800")
self.title('Login')
self.resizable(0, 0)
if __name__ == "__main__":
app = App()
MainFrame(app)
app.mainloop()
self.pack()
正在调用 MainFrame
的实例,其父窗口是根窗口。 而其他 .grid(...)
正在调用该框架内的小部件。 因此它们不在同一个容器中。
最好不要在类方法中调用
self.pack()
,因为如何布局子级是父级的工作。