tkinter程序的窗口大小

时间:2017-02-19 23:39:11

标签: python user-interface ubuntu tkinter

实际上,我认为tkinter窗口的大小和它需要的一样大。不幸的是,对我来说并不是这样(我使用Lubuntu 16.04)。

我的问题: 可以请有人解释下面的例子吗?我不了解tkinter的行为。

这是一个例子:

import tkinter as tk

root = tk.Tk()

menubar = tk.Menu(root)

file_menu = tk.Menu(menubar)

menubar.add_cascade(label="This is a very long string because it's just a test . . . ", menu=file_menu)
file_menu.add_command(label="New", accelerator="Ctrl+N")

root.config(menu=menubar)
root.mainloop()

截图: 窗户不够大。为什么呢?

enter image description here

另一个例子(带容器框架):

import tkinter as tk

root = tk.Tk()

container = tk.Frame(root).pack()

menubar = tk.Menu(container)

file_menu = tk.Menu(menubar)

menubar.add_cascade(label="This is a very long string because it's just a test . . . ", menu=file_menu)
file_menu.add_command(label="New", accelerator="Ctrl+N")

root.config(menu=menubar)
root.mainloop()
截图:非常非常小!你真的看不到它。但为什么会这样呢?

enter image description here

1 个答案:

答案 0 :(得分:1)

Tk中的窗口大小是窗口几何管理器的函数。对于您的顶层窗口,几何管理器是'wm',这意味着它由平台窗口管理器管理。这会向应用程序窗口询问大小或设置默认值。菜单小部件不提供大小,因此不会影响几何计算。所以你得到一个默认的toplevel大小,因为你没有在里面管理小部件。

在第二种情况下,您创建了一个没有大小尺寸的框架,其默认高度和宽度为0.您打包这个框架设置顶层wdget以使用包几何管理器作为其从属。这会询问从属设备(您的框架)需要多少空间,并将主设备(顶层)设置为适合包含它们的大小。这里是0.如果你设置框架的宽度和高度,顶层将展开以包含它。