2014-03-27 65 views
0

我錯開的部分或使用網格包幾何經理我的計劃 - 我知道,如果你做到這一點始終讓你不處於同一水平同時使用電網&回這是可能的。調試的Tkinter程序

當然,我做錯了什麼,而是因爲Tkinter的似乎不扔在這樣的情況下例外,我無法找到的錯誤:它只是坐在運行,而不再顯示程序界面。

在這種衝突的情況下,有一些方法可以調試程序嗎?

回答

1

如果你把所有的幾何管理代碼放在一起,這變得比較容易解決的。我看到誰像這樣寫代碼許多人:

e = Entry(...) 
e.grid(...) 
f = Frame(...) 
f.grid(...) 
... 

取而代之的是,將所有的佈局在一起,就像這樣:

e = Entry(...) 
f = Frame(...) 
... 
e.grid(...) 
f.grid(...) 

通過這樣做,它應該當你混合電網迅速成爲明顯並將它們打包在一起。另外,當您需要添加或刪除額外的小部件時,它可以在稍後重構您的代碼變得更加容易。

本着同樣的精神,我看到誰像這樣寫代碼的人:

class Something(tk.Frame): 
    def __init__(self, ...): 
     self.pack(...) 

一個widget/widget類不應該負責裝箱/其父griding本身。如果您在代碼中的其他位置更改幾何管理器,則需要您檢查其他每個類以查找哪些類將自己插入到容器中。無論代碼如何創建,孩子都應負責調用網格或打包這些孩子。

最後,請確保任何給定的容器,所有的包裝和griding的發生在同一個地方。對於一個容器分佈在兩個或更多個函數或類上的包或網格調用沒有。

如果您重構您的代碼以遵循這些規則,應該很容易地看到問題出在哪裏,因爲調用網格的代碼行和調用位置的代碼行將位於同一代碼塊中。

如果無法做出這些改變,你別無選擇,只能開始註釋掉調用包(或網格;沒關係,選一個),直到你的代碼開始工作。這應該可以幫助你找出哪個部件是罪魁禍首。

+0

像往常一樣非常清晰,謝謝。但我仍然不明白爲什麼這是唯一的例子(我知道)在面對明顯的錯誤時,根本不會產生錯誤 – alessandro