[英]How does tkinter's grid_columnconfigure / row_columnconfigure work?
[英]Why wont my grid_columnconfigure work on this tkinter code?
刚开始学习 tkinter 并且我正在处理网格管理。 我将 a 框架设置为在第 0 列上的权重为 1,因此我希望 label1 被拉伸到框架的末尾,然后在第 1 列上添加 label2,其长度相对于其文本大小。
预计 output: https://gyazo.com/65cf907e2cdea07d08844bdc8c62c7b2
output: https://gyazo.com/3c9e9c9f86372e01e96283545387c51e
这是我的代码:
import tkinter as tk
class App(tk.Tk):
def __init__(self, *args, **kwargs):
tk.Tk.__init__(self, *args, *kwargs)
container = tk.Frame(self)
container.pack(side="top", fill="both", expand=True)
container.grid_rowconfigure(0, weight=1)
container.grid_columnconfigure(0, weight=1)
frame_list = (MenuFrame,
)
self.geometry("1024x768")
self.frames = {}
for F in frame_list:
page_name = F.__name__
frame = F(parent=container, controller=self)
self.frames[page_name] = frame
frame.grid(row=0, column=0, sticky="nsew")
self.show_frame("MenuFrame")
def show_frame(self, page_name):
frame = self.frames[page_name]
frame.tkraise()
class MenuFrame(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
self.controller = controller
self.create_widgets(self)
def create_widgets(self, parent):
frame = tk.Frame(self, bg="white")
frame.grid_columnconfigure(0, weight=1)
frame.grid_rowconfigure(0, weight=1)
label1 = tk.Label(frame, text="Label one", bg="red")
label2 = tk.Label(frame, text="Label two", bg="blue", fg="white")
frame.grid(row=0, column=0, sticky="nsew")
label1.grid(row=0, column=0)
label2.grid(row=0, column=1)
if __name__ == "__main__":
app = App()
app.mainloop()
您正在正确配置frame
的权重。 但是,没有正确配置frame
来填充 window。 因此,对于两个标签来说,它的宽度刚好够,因此weight
没有影响。
由于frame
似乎是 class MenuFrame
中唯一的小部件,因此我将使用pack
而不是grid
因为它只需要一行:
frame.pack(fill="both", expand=True)
如果您更喜欢使用grid
,那么您还需要为其父级配置权重。
self.grid_rowconfigure(0, weight=1)
self.grid_columnconfigure(0, weight=1)
frame.grid(row=0, column=0, sticky="nsew")
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.