tkinter 网格不根据窗口大小调整大小

kytexaranort

所以我遇到了一些我无法理解并需要帮助的事情。我有 2 个按钮,它们都将您发送到下一帧,它们工作得很好,但是当我调整窗口大小时,它们保持相同的大小并保持在左上角,我希望它们将它们自己放在屏幕的中央。如果有一个关于它们也在成长的例子,那也将是值得赞赏的,但不是必需的。如果可能的话,我也想坚持使用网格。我尝试了 columnconfigure 并将框架放在另一个框架中,但我所做的一切似乎都不起作用。奇怪的是,如果我用 self 替换容器并将 self 放在它可以工作的按钮上但没有命令工作,有人可以向我解释这一点或给我一个很好的例子来说明我做错了什么?

代码示例:

import tkinter as tk
class MYapp(tk.Tk):
    def __init__(self, *args, **kwargs):
        tk.Tk.__init__(self, *args, **kwargs)

        container = tk.Frame(self)
        container.grid(row = 0,column = 0, sticky = "nsew")
        container.rowconfigure(0, weight = 1)
        container.columnconfigure(0, weight = 1)
        container.columnconfigure(1, weight = 1)
        self.frames = {}
        for FRAME in (N1, N2):
            frame = FRAME(container, self)
            self.frames[FRAME] = frame
            frame.grid(row = 0, column = 0, sticky = "nsew")
        self.show_frame(N1)
    def show_frame(self, cont):
        frame = self.frames[cont]
        frame.tkraise()
class N1(tk.Frame):
    def __init__(self, parent, controller):
        tk.Frame.__init__(self, parent)
        a = tk.Button(self, text = "N1", command = lambda: controller.show_frame(N2))
        a.grid(row = 0, column = 0, sticky = "nsew")
        c = tk.Button(self, text = "N1", command = lambda: controller.show_frame(N2))
        c.grid(row = 0, column = 1, sticky = "nsew")
class N2(tk.Frame):
    def __init__(self, parent, controller):
        tk.Frame.__init__(self, parent)
        b = tk.Button(self, text = "N2")
        b.grid(row = 0, column = 0, sticky = "nsew")
if __name__ == "__main__":
    app = MYapp()
    app.mainloop()

已解决:感谢布赖恩。这是带有答案的更新代码。

import tkinter as tk
class MYapp(tk.Tk):
    def __init__(self, *args, **kwargs):
        tk.Tk.__init__(self, *args, **kwargs)

        container = tk.Frame(self)
        container.pack(fill="both", expand=True)
        container.rowconfigure(0, weight = 1)
        container.columnconfigure(0, weight = 1)
        self.frames = {}
        for FRAME in (N1, N2):
            frame = FRAME(container, self)
            self.frames[FRAME] = frame
            frame.grid(row = 0, column = 0, sticky = "nsew")
            frame.rowconfigure(0, weight = 1)
            frame.columnconfigure(0, weight = 1)
            frame.columnconfigure(1, weight = 1)
        self.show_frame(N1)
    def show_frame(self, cont):
        frame = self.frames[cont]
        frame.tkraise()
class N1(tk.Frame):
    def __init__(self, parent, controller):
        tk.Frame.__init__(self, parent)
        a = tk.Button(self, text = "N1", command = lambda: controller.show_frame(N2))
        a.grid(row = 0, column = 0, sticky = "nsew")
        c = tk.Button(self, text = "N1", command = lambda: controller.show_frame(N2))
        c.grid(row = 0, column = 1, sticky = "nsew")
class N2(tk.Frame):
    def __init__(self, parent, controller):
        tk.Frame.__init__(self, parent)
        b = tk.Button(self, text = "N2")
        b.grid(row = 0, column = 0, sticky = "nsew")
if __name__ == "__main__":
    app = MYapp()
    app.mainloop()
布莱恩奥克利

你不知道首选的行为是什么,只是它在做什么是错误的。我不知道这个建议是否会做你想要的。

根据经验,当您使用时,grid您应该始终为包含正在管理的小部件的父级赋予至少一行和一列的权重。当您为容器中的小部件执行此操作时,您不会为根窗口执行此操作。因此,容器小部件可能会正确调整大小,但您不会看到它,因为容器本身没有调整大小。

如果您只想将一个小部件放入另一个小部件中,我建议您使用,pack因为您可以在一行代码中完成所有操作。因此,我建议使用pack而不是grid容器本身:

container.pack(fill="both", expand=True)

此外,由于您的容器似乎只有一行和一列,您可能不想为第 1 列赋予权重。

最后,您还使用grid管理每个页面 ( N1, N2)内的小部件,但同样,您忘记为这些框架内的任何行或列赋予权重。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Python Tkinter 将按钮大小调整为窗口大小

来自分类Dev

Tkinter窗口调整大小

来自分类Dev

当用户调整窗口大小时,Python tkinter 小部件的大小调整不均匀

来自分类Dev

调整Tkinter窗口和内容的大小

来自分类Dev

如何防止使用tkinter调整窗口大小?

来自分类Dev

调整tkinter窗口的大小以全屏显示

来自分类Dev

如何使用Tkinter动态调整窗口大小?

来自分类Dev

使用Tkinter网格管理器将背景图像调整为窗口大小

来自分类Dev

使用Tkinter网格管理器将背景图像调整为窗口大小

来自分类Dev

tkinter网格和框架不调整框架大小

来自分类Dev

根据窗口大小调整div以及内部内容的大小

来自分类Dev

MS Word根据窗口大小调整图像大小

来自分类Dev

如何根据窗口大小调整元素大小

来自分类Dev

Tkinter,当调整窗口大小时,Canvas拒绝扩展或收缩

来自分类Dev

调整大小时如何防止图像填充整个Tkinter窗口?

来自分类Dev

如何在Tkinter的“顶级”窗口上强制调整大小?

来自分类Dev

Tkinter将背景图像调整为窗口大小

来自分类Dev

如何使Tkinter窗口不可调整大小?

来自分类Dev

如何在Tkinter窗口中调整从网站提取的照片的大小

来自分类Dev

Tkinter,当调整窗口大小时,Canvas拒绝扩展或收缩

来自分类Dev

tkinter 中可调整大小的窗口框架

来自分类Dev

tkinter调整窗口大小而滚动条不消失

来自分类Dev

tkinter 元素不使用窗口调整大小,使用包

来自分类Dev

在tkinter中调整图像大小

来自分类Dev

当无法调整大小时,tkinter窗口会在缩放状态下更改大小

来自分类Dev

Tkinter按钮无法根据Mac上的字体大小正确调整大小

来自分类Dev

根据屏幕大小调整文本大小

来自分类Dev

根据屏幕大小调整文本大小

来自分类Dev

根据图像大小调整UIImageView的大小?

Related 相关文章

  1. 1

    Python Tkinter 将按钮大小调整为窗口大小

  2. 2

    Tkinter窗口调整大小

  3. 3

    当用户调整窗口大小时,Python tkinter 小部件的大小调整不均匀

  4. 4

    调整Tkinter窗口和内容的大小

  5. 5

    如何防止使用tkinter调整窗口大小?

  6. 6

    调整tkinter窗口的大小以全屏显示

  7. 7

    如何使用Tkinter动态调整窗口大小?

  8. 8

    使用Tkinter网格管理器将背景图像调整为窗口大小

  9. 9

    使用Tkinter网格管理器将背景图像调整为窗口大小

  10. 10

    tkinter网格和框架不调整框架大小

  11. 11

    根据窗口大小调整div以及内部内容的大小

  12. 12

    MS Word根据窗口大小调整图像大小

  13. 13

    如何根据窗口大小调整元素大小

  14. 14

    Tkinter,当调整窗口大小时,Canvas拒绝扩展或收缩

  15. 15

    调整大小时如何防止图像填充整个Tkinter窗口?

  16. 16

    如何在Tkinter的“顶级”窗口上强制调整大小?

  17. 17

    Tkinter将背景图像调整为窗口大小

  18. 18

    如何使Tkinter窗口不可调整大小?

  19. 19

    如何在Tkinter窗口中调整从网站提取的照片的大小

  20. 20

    Tkinter,当调整窗口大小时,Canvas拒绝扩展或收缩

  21. 21

    tkinter 中可调整大小的窗口框架

  22. 22

    tkinter调整窗口大小而滚动条不消失

  23. 23

    tkinter 元素不使用窗口调整大小,使用包

  24. 24

    在tkinter中调整图像大小

  25. 25

    当无法调整大小时,tkinter窗口会在缩放状态下更改大小

  26. 26

    Tkinter按钮无法根据Mac上的字体大小正确调整大小

  27. 27

    根据屏幕大小调整文本大小

  28. 28

    根据屏幕大小调整文本大小

  29. 29

    根据图像大小调整UIImageView的大小?

热门标签

归档