2014-01-30 62 views
0

請幫助修復代碼如何創建給定大小的窗口?

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() 

的問題是,參數的具體尺寸打包機區工作區,但在啓動程序出於某種原因後,一個窗口小(約等於大小刻字MSG)。在發射後是否可以這樣做,創建了一個340x170像素的窗口,沐浴着紅色。並放在窗口中的文字信息?

回答

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非常擅長使小部件尺寸合適。通過關閉此功能,您完全有責任使小部件具有適當的大小,這在面對不同的屏幕分辨率,不同的字體以及用戶調整窗口大小時可能很困難。

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像素。

+0

這將修復整個窗口的大小,而不是內部框架的大小。如果整個窗口僅由內部框架組成,則可能會對某些窗口管理器產生期望的效果。由窗口管理員決定維度是包含還是不包含窗口邊框 - 也就是說,如果您希望_inside_爲特定大小,則「幾何」實際上可以根據您使用的窗口管理器設置_outside_。 –

相關問題