【问题标题】:Why wont my grid_columnconfigure work on this tkinter code?为什么我的 grid_columnconfigure 不能在这个 tkinter 代码上工作?
【发布时间】:2020-11-26 13:25:51
【问题描述】:

刚开始学习 tkinter,我正在处理网格管理。 我将 a 框架设置为第 0 列的权重为 1,因此我希望 label1 被拉伸到框架的末尾,然后将 label2 添加到第 1 列,长度相对于其文本大小。

预期输出:https://gyazo.com/65cf907e2cdea07d08844bdc8c62c7b2

输出: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()

【问题讨论】:

  • @Abrar 感谢您的评论,我实际上正在寻找一种使用权重拉伸 label1 的方法,而不是通过 width 参数手动更改其宽度。
  • @Abrar,不完全是,有关我想要做什么的更多信息,请查看这个问题! stackoverflow.com/questions/45847313/…基本上,如果初始窗口宽度为1000,每个标签宽度为100,我希望labelone覆盖900,然后放置labeltwo覆盖100。每次更改初始窗口宽度时都是相对的。
  • @Abrar 基本框架。
  • @Abrar 在第 37 行使用:tk.Frame.__init__(self, parent) 用作 MenuFrame 的父框架,因此在初始化 MenuFrame 时它继承了基本框架的质量跨度>
  • @Abrar 计划在我解决这个问题后使用它,所以我认为这不是重点

标签: python tkinter


【解决方案1】:

您正在正确配置frame 的权重。但是,frame 尚未正确配置为填充窗口。因此,这两个标签的宽度刚好够,因此weight 无效。

由于frame 似乎是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")

【讨论】:

    猜你喜欢
    • 2023-03-22
    • 1970-01-01
    • 2021-03-21
    • 1970-01-01
    • 2015-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多