我是新來的Tkinter而在此之前已經開發了只有一個GUI的量後崩潰。我決定創建一個隨機地形生成器,使用標籤來表示一個10×10的網格塊。我已經完成了它並通過製作大量標籤來修復內存泄漏。我還實現了一個隨機按鈕和滾動。然而,在大約100次(大約98次最後一次檢查)網格更新之後,它會出現一個灰色邊框出現在窗口之外,並且世界的頂部將顯示爲灰色,然後程序將停止響應。沒有錯誤信息,所以我不知道如何解決這個問題。代碼位於:pastebin:http://pastebin.com/SASFuQCZ,雖然它很長。任何幫助解決這個將不勝感激。謝謝。的Tkinter程序使用
回答
也許別人可以計算出來,但對我來說你的代碼簡直太難以理解。但是,即使我無法解決問題,我也可以給出一些建議,以幫助您刪除大概一千行代碼,這可能會使問題更容易被發現。
你知道,你可以創建循環部件?您可以使用非常簡單的技術輕鬆刪除幾百行代碼。另外,您是否意識到您可以更改現有標籤的顏色而不破壞它並重新創建它?
最後,你並不需要所有的STRINGVAR這些實例,因爲你只存儲它們的顏色。一個正常的變量會做。當您試圖將兩個或更多小部件的標籤或值綁定在一起時,StringVars確實非常有用。如果您想將單元格顏色存儲在變量中,請將它們存儲在與標籤相同的數據結構中,然後重繪函數只需執行一次循環即可將每種顏色應用於每個單元格。
例如,可將所有的初始顏色爲「皇家藍」,你可以這樣做以下。我用一本字典,但你可以只是簡單地使用一個列表的列表:
color = {}
for row in range(10):
for column in range(10):
color[(row, column)] = "royal blue"
接下來,您可以創建10×10的標籤網格具有相同的簡單循環。這可以代替200行代碼(加上另外100個空白行),只用6行代碼就可以創建原始標籤。
# to create the labels and store them in a dictionary:
cell = {}
for row in range(10):
for column in range(10):
l = Label(app, text=" ", background=color[(row, column)])
l.grid(row=row, column=column)
cell[(row,column)] = l
您可以使用configure更新每個標籤。因此,例如,更改標籤0,0爲紅色,你這樣做:
cell[(0,0)].configure(background="red")
可以檢索標籤與cget
方法的背景色。例如,這將打印「紅」:
print cell[(0,0)].cget("background")
使用所有這些技術可能會降低你的代碼下降到只有幾百行,這將使你更容易發現任何錯誤。
感謝您提供縮短代碼的建議。我會這樣做,看看問題是否消失。如果沒有,我會在這裏發佈新的代碼,這應該更容易看到。我知道這有點長,但我很難找到關於這類事情的文檔,所以再次感謝關於凝聚我的計劃的幫助。 – user3477719
- 1. 使用py2exe對的Tkinter程序
- 2. 使用Tkinter的Python BMI程序
- 3. Tkinter全屏應用程序
- 4. 組織tkinter應用程序
- 5. 如何正確關閉使用線程的Tkinter應用程序
- 6. 調試的Tkinter程序
- 7. 使Tkinter Photoimage崩潰python程序
- 8. 使用tkinter作爲GUI並使用它來運行程序
- 9. 使用套接字的Tkinter應用程序開始掛起
- 10. 使用Tkinter的
- 11. Tkinter程序無法加載
- 12. Tkinter帆布凍結程序
- 13. tkinter程序以cmd打開
- 14. 在Python中使用Tkinter時掛起的程序
- 15. 在Python中使用Tkinter創建一個簡單的gui程序
- 16. 使用tkinter作爲另一個python程序的開始菜單
- 17. 使用的Tkinter作爲通知然後返回到程序
- 18. 轉換Tkinter應用程序與CLI CLI
- 19. 單元測試tkinter應用程序
- 20. Tkinter應用程序名稱/菜單
- 21. Matplotlib崩潰tkinter應用程序
- 22. 將matplotlib嵌入到tkinter應用程序
- 23. 從tkinter/python調用perl程序
- 24. 讓Tkinter的跳到前方 - 但只是相對的Tkinter程序
- 25. 在Mac Cocoa應用程序中使用Tkinter框架
- 26. 如何在tkinter應用程序中使用Unicode字符?
- 27. 如何使用URL設置tkinter應用程序圖標?
- 28. 使用tkinter的GUI
- 29. 線程暫停執行Tkinter程序
- 30. 用Tkinter扭曲的線程
我想你贏得最重複的獎品。你可以將這1800條線路敲下來,只需幾百個循環即可。這會讓你的代碼更容易理解。 –