如何创建给定大小的窗口?

时间:2014-01-30 19:36:25

标签: python tkinter

请帮助修复代码

import tkinter

def makeWorkArea(parent):
    WorkArea = tkinter.Frame(parent)
    WorkArea.config(relief = 'sunken', width = 340, height = 170, bg = 'red')
    WorkArea.pack(expand = 'yes', fill = 'both')

    msg = tkinter.Label(WorkArea, text='Window menu basics')
    msg.pack()

root = tkinter.Tk()
makeWorkArea(root)
root.mainloop()
问题是参数是特定尺寸的包装工区域WorkArea,但由于某种原因启动程序后,一个窗口较小(大约等于字母msg的大小)。是否有可能在发布后创建一个340x170像素的窗口,沐浴在红色。并放在窗口文本msg?

2 个答案:

答案 0 :(得分:1)

我相信您需要tkinter.Tk.geometry方法:

import tkinter

def makeWorkArea(parent):
    WorkArea = tkinter.Frame(parent)
    WorkArea.config(relief = 'sunken', width = 340, height = 170, bg = 'red')
    WorkArea.pack(expand = 'yes', fill = 'both')

    msg = tkinter.Label(WorkArea, text='Window menu basics')
    msg.pack()

root = tkinter.Tk()
###########################
root.geometry("340x170")
###########################
makeWorkArea(root)
root.mainloop()

评论框中的行将窗口的初始大小设置为340x170像素。

答案 1 :(得分:0)

默认情况下,gridpack几何体管理器会执行所谓的“几何体传播”。这是一个奇特的名称,说框架和窗口缩小或扩展,以适应其内容。这几乎总是你想要的。

如果要使框架具有特定尺寸,最佳解决方案是关闭几何体传播。执行此操作时,窗口小部件将遵循widthheight属性,并忽略任何子窗口小部件的大小。

请参阅以下代码中的最后一行:

def makeWorkArea(parent):
    WorkArea = tkinter.Frame(parent)
    WorkArea.config(relief = 'sunken', width = 340, height = 170, bg = 'red')
    WorkArea.pack(expand = 'yes', fill = 'both')

    WorkArea.pack_propagate(False)

请注意,关闭传播通常是code smell。这通常意味着你做错了什么。 Tkinter非常擅长制作尺寸合适的小部件。通过关闭此功能,您完全有责任使小部件具有适当的大小,这在面对不同的屏幕分辨率,不同的字体以及用户调整窗口大小时可能很难。