2017-02-19 93 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