【问题标题】:tkinter's .pack_propagate() methodtkinter 的 .pack_propagate() 方法
【发布时间】:2012-04-17 07:17:43
【问题描述】:

我正在尝试使用 Tkinter,因为我试图弄清楚是否有一种方法可以在不使用画布的情况下设置 tkinter 的窗口大小。我想到了如何set frame size question on SO's Question & Answer。所以我继续通过编写一个非常小的程序来显示文本标签来测试它。但我发现它是“失踪”,或者当我使用frame.pack_propagate(0)时消失了

import tkinter as tk

root = tk.Tk()
frame = tk.Frame(root, width=400, height=400)
# Does not work at the moment, textBox is missing
# frame.pack_propagate(0) 
frame.pack()

textBox = tk.Label(frame, text="(x,y): ")
textBox.pack()

root.mainloop()

所以我的问题是,你能解释一下为什么当我使用frame.pack_propagate(0) 而不是frame.pack() 方法时我的文本框(标签)没有出现吗?其次,有没有办法在不使用画布的情况下设置窗口大小?我想知道,因为我正在编写一系列小程序来教我朋友关于 tkinter 的知识,然后再向他介绍 canvas。如果我的 tkinter 样本的窗口大小都相同,那就太好了。我也想知道(好奇)。非常感谢。

我在 MAC OS 10.5.8 上使用 python 3.2.2。

【问题讨论】:

    标签: python tkinter label


    【解决方案1】:

    pack_propagate 只设置一个标志,它不会导致框架被放置在小部件中。它不能替代调用pack

    换句话说,你必须这样做:

    # put the frame in its parent
    frame.pack()
    
    # tell frame not to let its children control its size
    frame.pack_propagate(0)
    
    # put the textbox in the frame
    textBox.pack()
    

    【讨论】:

      【解决方案2】:

      回答你的第二个问题:是的,有办法。

      tkinter Tk 确实有 Tk.geometry 功能。当您不带参数调用它时,您将以'widthxheight+x+y' 的形式获得当前几何图形,例如(在 Windows 10 上)'200x200+26+26' 创建您的第一个 Tk 窗口时。使用该格式,您可以调整 Tk 的大小,例如,编写:root.geometry('400x500+60+60') 将宽度设置为 400,高度设置为 500,并将其放置在坐标 (60|60) 处。

      这适用于Tk 也适用于Toplevel。但是Toplevel 在初始化或配置时也接受参数高度和宽度。如果您希望它们在包装东西时保持它们的大小,只需在它们上使用root.pack_propagate(False)

      顺便说一句,网格管理器也有类似的东西:root.grid_propagate(False)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-11-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-04
        • 1970-01-01
        相关资源
        最近更新 更多