关于pygame和tkinter窗口的那件事-线程
pygame與tkinter關于窗口的問題
pygame和tkinter實際上都是一個可視化界面,在第一層父窗口上幾乎沒有區別,tkinter使用Tk()+mainloop()+按鍵對象+放置 而pygame使用set_mode+update+按鍵對象+按鍵對象屬性設置(一般是位置),但是關于使用子窗口是有明顯區別的。
tkinter創建子窗口時如果只是顯示,不對窗口操作(點擊按鈕,輸入等),則直接使用Tk()創建窗口即可。如一些數據展示窗口。但是如果需要對子窗口進行操作eg:數據寫入,按鈕+響應等等,就需要使用到頂層子窗口Toplevel()。
從線程角度說明他們的不同點
tkinter使用單線程,如果只是開啟窗口顯示,不涉及對主線程的內容修改,則可以開啟多個這樣的子窗口(嚴格上說這不是真正意義的子窗口,因為與主窗口沒有進行數據關聯,因為是各干各的只是借助主窗口的函數調用創建該窗口,算是一個額外的線程)。但是如果需要子窗口對主線程中的數據(也可能是我們導入的數據)進行修改,就需要用到Toplevel(相當于一個額外的線程+主線程中的內部類),它可以修改主線程中的內部數據,傳遞參數等等。
概括:使用tkinter做圖形窗口時,如果窗口涉及操作直接使用toplevel()。其他只需可視化的情況使用Tk()直接創建新窗口也是可行的。
實例說明:
在做一個計算器的擴展功能-貸款計算時,遇到了這個問題。
問題描述:
在貸款計算之前,添加了一個純展示的子窗口(tk實現)功能,打開后父窗口可以正常運行。然后使用了同樣的方法做了貸款窗口,因為過程中涉及到了窗口的輸入,對主線程中的數據進行了修改,雖然父窗口正常運行)但是子窗口報錯了。
解決:
將貸款的實現窗口修改為tk.toplevel()
pygame也是單線程的,但是其沒有類似tkinter中的toplevel,不能創建同時運行的兩個窗口。創建子窗口(如:tkinter窗口)時pygame會暫停了父窗口任務,將資源給了給剛創建的子窗口,在子窗口返還資源之前(關閉之前),父窗口會一直處于未響應狀態(等待返還主線程的資源)。
實例說明:
在做拼圖游戲的原圖顯示功能時,發現了該問題。當顯示原圖(子窗口)時,主窗口處于未響應狀態,關閉子窗口后,主窗口正常響應。
建議:
盡量不要使用在pygame上建立多個窗口,因為他只能同時運行單個線程,創建很多的窗口也只能實現窗口并發操作,不能實現并行
總結
以上是生活随笔為你收集整理的关于pygame和tkinter窗口的那件事-线程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: github文件上传全流程-新手入门系列
- 下一篇: 归并排序,快速排序,冒泡排序,选择排序,