2017-02-19 89 views
2

实际上,我认为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() 

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

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

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

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

+0

所以问题是菜单栏与窗口大小无关? – Aliquis

+0

是的。该菜单与顶层相关联。它不是'内部'。 Tk文档提到了这一点(http://www.tcl.tk/man/tcl8.6/TkCmd/toplevel.htm#M11),在窗口上指出菜单是装饰的一部分,并由窗口框架管理。它在X11上有点不同,但'winfo_manager'会告诉你什么是管理每个部件。 – patthoyts