2017-05-25 142 views
0

我尝试了解tkinter的工作原理。我有这个简单的程序:如何使用tkinter自定义框架

import tkinter as tk 

class Application: 
    def __init__(self, master): 
     frame = tk.Frame(master, height=100, width=500, bg="#FFFFFF", bd=10) 
     frame.grid() 
     self.button = tk.Button(frame, text="QUIT", fg="red", command=frame.quit) 
     self.button.grid() 

root = tk.Tk() 
app=Application(root) 
root.mainloop() 
当我运行该程序,我得到一个窗口

,但我为框架指定的选项(高度,宽度...)不工作。我的错误在哪里?感谢您的帮助。

回答

-1

您需要将grid_propagate设置为零。这将停止调整帧大小的按钮。

frame.grid()之后,加frame.grid_propagate(0)

import tkinter as tk 

class Application: 
    def __init__(self, master): 
     frame = tk.Frame(master, height=100, width=500, bg="#FFFFFF", bd=10) 
     frame.grid() 
     frame.grid_propagate(0) 
     self.button = tk.Button(frame, text="QUIT", fg="red", command=frame.quit) 
     self.button.grid() 

root = tk.Tk() 
app=Application(root) 
root.mainloop() 
+0

'grid_propagate'对于正在学习tkinter的人来说是个不好的建议。这几乎从来都不是适当的解决方案。 –

0

Tkinter窗口小部件旨在“缩小以适应”他们的子窗口小部件。如果您的目标是编写响应字体,分辨率和大小更改的GUI,则几乎总是您想要的。换句话说,你没有犯过错,tkinter的行为完全按照它的设计行事。

虽然有办法强制窗口达到特定的大小,但我强烈建议不要这样做。如果您将注意力集中在制作适当尺寸的内部小工具上,则您的框架和主窗口将全部智能调整大小以确保一切正常。几乎不需要给任何东西显示像素大小(除了可能是画布)。

+0

谢谢布赖恩您的建议! – user3283415