繁体   English   中英

为什么我的 grid_columnconfigure 不能在这个 tkinter 代码上工作?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM