python弹出窗口后卡死_python的tkinter模块GUI编程为啥用了while循环之后就会使得程序出现卡死未响应崩溃?...
這位同學,首先無代碼無真相。只能在這里猜測一下,你在GUI界面中點擊了某個按鈕,調用的函數然后觸發了某種while循環,這個時候前臺GUI將“未響應”卡死。不過一旦調用函數的while循環結束,GUI界面將再次可用。
不使用線程的話,后臺while循環處理和前臺GUI顯示是依次串行的,做完一件事情才能做另一件。使用線程是GUI通常的做法,可以使后臺while循環處理中的信息實時顯示在前臺GUI上。
關于tkiner的after方法,只是將函數的調用時間向后延時一些,進入調用的函數后與直接調用函數沒有區別。
此外,根據題主說的request的事情,繼續猜一下。首先來說下線程的事情,處理request的線程不能這樣使用
p=Thread(target=a_while_func_about_request, args=(some_args))
p.start()
p.join()
這樣使用線程雖然將主線程的while循環移到線程p的內部,但由于主線程一直等待p.join()什么也做不了,相當于主線程直接調用了a_while_func_about_request函數。要利用到線程的并發性能,主線程不能傻傻的p.join(),至少還需要一個標志變量,通過標志變量判斷線程p是否完成request請求,例如:
# 主線程
request_done = False
p=Thread(target=a_while_func_about_request, args=(some_args))
p.start()
while request_done == False:
# 繼續處理主線程邏輯
...
else:
# 根據request內容進行顯示
...
p.join()
# 子線程部分
def a_while_func_about_request(some_args):
# request獲取內容部分
...
request_done = True
2. GUI方面也需要根據程序邏輯設計:
情況一:在獲取請求request內容的過程中GUI必須等待數據無法進行下一步操作,類似玩游戲時等待讀進度條,無法跳過,GUI也無需提供其它操作。這種情況可以在等待期間顯示一個“處理中...”的進度條,然后主線程定時檢查request_done標志位(可以使用到after方法),等到request_done為True時,主程序知道request獲取完畢,可以繼續GUI后續的顯示。
情況二:在獲取request內容時,GUI繼續顯示某個主界面,稍后通過某個“讀取結果”的按鈕對結果進行顯示,這樣類似于游戲在讀進度條的時候窗口切出去刷網頁什么的,過一會兒再切回來看看進度條是否讀好了。這種情況下,每次切回來看看進度條情況的相當于檢查request_done標志位,根據是否完成設計GUI后續的顯示流程。
總結
以上是生活随笔為你收集整理的python弹出窗口后卡死_python的tkinter模块GUI编程为啥用了while循环之后就会使得程序出现卡死未响应崩溃?...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 取消android所有动画,androi
- 下一篇: 太吾绘卷第一世攻略_建平中学高二数学周练