窗口太小了

时间:2012-01-28 21:49:11

标签: python user-interface tkinter

以下是代码:

from Tkinter import *

def main():
    w1 = Tk()
    w1["height"] = 400;
    w1["width"] = 500;
    w1.title("Gui")
    f1 = Frame(w1)
    f1.grid_propagate()
    f1["height"] = w1["height"];
    f1["width"] = w1["width"];
    f1.pack()
    p1 = Button(f1)
    p1["borderwidth"] = 6
    p1["text"] = "esci"
    p1["background"] = "red"
    p1["command"] = f1.quit
    p1.pack()
    w1.mainloop()
main()

我已经给w1f1(窗口和框架)一个500x400的尺寸,但是会出现一个太小的窗口:它太小了,我会说200x100,但我不知道。 ..为什么会这样?

2 个答案:

答案 0 :(得分:1)

您需要使用

f1.pack_propagate(0)

这样它就不会缩小

答案 1 :(得分:1)

这很小,因为默认情况下tkinter窗口“缩小到适合”。这称为几何传播,看起来你可能已经熟悉了它,因为你调用了grid_propagate - 但是,它没有实际执行任何操作而没有使用它返回的内容。

您的代码实际上存在两个问题。首先是您致电f1.grid_propagate(),但是您使用pack来安排f1中的小部件,因此您需要拨打f1.pack_propagate。其次,您需要传递False的标志才能实际关闭传播。这样做可以防止f1缩小以适应其内容。

其次,你不会在w1上关闭传播,所以它会缩小以适应它的孩子。您需要调用w1.grid_propagate(False),或者您可以调用w1.wm_geometry("500x400")来请求窗口管理器将大小设置为该确切维度。

如果您只是在学习Tkinter,我建议您抵制将传播关闭的冲动。在我用了几十年的编码时间里,我每隔几年就会使用一次这个功能。 Tkinter的几何管理器是非凡的工具,你应该学会利用它们。不要让容器控制它们的大小,让孩子们成为你想要的大小,GUI的其余部分也可以正常工作。