tkinter程序的窗口大小
问题描述:
实际上,我认为tkinter窗口的大小与它需要的一样大。不幸的是,这对我来说并不正确(我使用Lubuntu 16.04)。tkinter程序的窗口大小
我的问题: 可以请某人向我解释下面的例子吗?我不明白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()
截图: 窗口不够大。为什么?
另一个例子(与容器框架):
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()
截图:非常非常小!你无法真正看到它。但为什么是这样呢?
答
窗户大小Tk是该窗口的几何管理器的功能。在顶层窗口中,几何管理器是'wm',这意味着它由平台窗口管理器管理。这会询问应用程序窗口的大小或设置默认值。菜单小部件不提供大小,因此不会影响几何计算。所以你得到一个默认的顶层大小,因为你没有管理的小部件。
在第二种情况下,您创建了一个没有大小尺寸的框架,其默认高度和宽度均为0.您将此设置为设置顶层wdget以使用其包装的几何管理器。这会询问从站(您的框架)他们需要多少空间,并将主站(顶层)设置为合适的大小以包含它们。这里是0.如果你设置框架的宽度和高度,顶层将展开以包含它。
所以问题是菜单栏与窗口大小无关? – Aliquis
是的。该菜单与顶层相关联。它不是'内部'。 Tk文档提到了这一点(http://www.tcl.tk/man/tcl8.6/TkCmd/toplevel.htm#M11),在窗口上指出菜单是装饰的一部分,并由窗口框架管理。它在X11上有点不同,但'winfo_manager'会告诉你什么是管理每个部件。 – patthoyts