第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

For 循環(huán)運(yùn)行時,Tkinter UI 變得無響應(yīng)

For 循環(huán)運(yùn)行時,Tkinter UI 變得無響應(yīng)

慕哥6287543 2022-01-05 10:42:07
我遇到了一個問題,我的 Tkinter UI 在 afor loop運(yùn)行時變得完全卡住并且無法交互。我的示例代碼在循環(huán)中打印“循環(huán)”,并且 UI 上有一個“取消”按鈕應(yīng)該停止循環(huán),但是由于我無法單擊“取消”按鈕,因此無法停止循環(huán). 所以我的問題是如何tkinter在循環(huán)運(yùn)行時使我的UI 可用。這是示例代碼:from tkinter import*import timeroot = Tk()i=10flag = Falsedef loop():    flag = True    for i in range(100):        if flag == True:            time.sleep(0.5)            print("Looping")def canc():    flag = Falsebtn = Button(root, text="Start Loop", command=loop).pack()cncl = Button(root, text="Cancel", command=canc).pack()root.mainloop()我曾嘗試為該loop函數(shù)創(chuàng)建一個新線程,但這不起作用。更新代碼,用戶界面響應(yīng),但按下取消時沒有任何反應(yīng):from tkinter import*import threadingimport timeroot = Tk()i=10flag = Falsedef loop():    flag = True    for i in range(10):        if flag == True:            time.sleep(0.5)            print("Looping")def run():    threading.Thread(target=loop).start()def canc():    flag = Falsebtn = Button(root, text="Start Loop", command=run).pack()cncl = Button(root, text="Cancel", command=canc).pack()root.mainloop()
查看完整描述

2 回答

?
德瑪西亞99

TA貢獻(xiàn)1770條經(jīng)驗(yàn) 獲得超3個贊

'flag' 不是全局變量,因此當(dāng)它在 canc() 中設(shè)置為 False 時,loop() 中的 'flag' 局部變量的值不會改變,因此循環(huán)不會停止


還需要使用 root.update() 來更新 GUI


補(bǔ)救措施:


from tkinter import*

import threading

import time


root = Tk()


def loop():


    global flag

    flag = True


    for i in range(10):

        if flag == True:

            root.update()

            time.sleep(0.5)

            print("Looping")


def canc():

    global flag

    flag = False


btn = Button(root, text="Start Loop", command=loop).pack()

cncl = Button(root, text="Cancel", command=canc).pack()


root.mainloop()


查看完整回答
反對 回復(fù) 2022-01-05
?
慕碼人8056858

TA貢獻(xiàn)1803條經(jīng)驗(yàn) 獲得超6個贊

我找到了解決這個問題的方法:


我在一個線程中開始了我耗時的工作,并檢查了我的線程是否仍在while 循環(huán)中運(yùn)行,并且在其中,我確實(shí)更新了我的Tkinter根目錄。


這是我的代碼:


 def start_axis(input):

    print(input)

    time.sleep(5)


def axis():

    t = threading.Thread(target=start_axis, args=("x"))        

    t.start()


    while t.is_alive():

        try:

            root.update()

        except:

            pass

args 部分很重要,因此線程不會立即調(diào)用該函數(shù)


查看完整回答
反對 回復(fù) 2022-01-05
  • 2 回答
  • 0 關(guān)注
  • 344 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號