2013-10-22 76 views
2

是否有可能以編程方式切換QPushButton?我有一個可檢查的QPushButton用戶按下來啓動一個過程。過程完成後,如何將按鈕的狀態更改爲未選中狀態?以編程方式切換Python PyQt QPushbutton

runBtn = QPushButton('Run') 
runBtn.setCheckable(True) 
runBtn.clicked.connect(runProcess) 

def runProcess(): 
    time.sleep(5) 
    runBtn.uncheck() # how should this be done? 

回答

1

這應該是訣竅。

runBtn.setChecked(False) 

雖然這不是理想的行爲。切換按鈕應該用於打開和關閉事物,而不是指示正在進行的事情。如果某些事情需要花費時間,則應將光標更改爲等待光標,最好仍顯示進度條/對話框。

1

一旦你的功能完成運行,它應該只是一個呼叫runBtn.setChecked(False)的問題。

@ hluk在評論這個答案時指出,任何需要很長時間才能做的事情都會阻止界面,並不是一個好主意。在這種情況下將它分成一個線程會更好。這可能意味着更多的學習,但從長遠來看可能是值得的。無論如何,如果您決定走線程路線,您可能還希望使用setEnabled(bool)在線程運行時通過按鈕禁用用戶輸入。

+0

您在該部分所做的工作不應該花費太多時間,否則GUI線程被阻止 - 應用程序將不會響應,GUI也不會被重新繪製。您應該在不同的線程中做更昂貴的任務,並使用GUI線程使用信號/插槽進行通信。 – hluk

+0

@ hluk:你當然是對的!我已經習慣了多次使用多線程的東西,我自己忘了這裏不是這種情況。我會更新我的迴應! –

+0

如果耗時的任務是CPU限制的(由於python的GIL),線程將不會提供任何好處 - 爲此需要多處理。 – ekhumoro