2012-07-19 79 views
2

我使用subprocess.call運行命令提示符命令需要一段時間(> 5分鐘)運行:當我不知道需要多長時間時,如何讓我的QProgressDialog顯示出來?

subprocess.call([command, param1, param2], cwd=cwdDir) 

我想用一個QProgressDialog表明該命令正在運行。我這樣做:

 progressDialog = QProgressDialog("Executing...", "", 0, 0) 
     progressDialog.setCancelButton(None) 
     progressBar = QProgressBar(progressDialog) 
     progressBar.setMinimum(0) 
     progressBar.setMaximum(0) 
     progressDialog.setBar(progressBar) 
     progressDialog.show() 
     subprocess.call([command, param1, param2], cwd=cwdDir) 
     progressDialog.close() 

當我運行我的程序,這是顯示的內容:

enter image description here

過了一會兒,我的命令執行完畢,窗口就會關閉。我如何獲得它,以便您可以在窗口中看到QProgressBar

+0

我是否正確理解您的問題 - 問題是進度對話框不顯示? – 2012-07-19 15:40:32

+0

@GeorgSchölly它並沒有完全顯示出來。圖中顯示的是對話框,但其中的內容不是 – 2012-07-19 15:43:20

+0

它看起來像'subprocess.call()'是一個阻塞函數調用。如果你阻止事件循環,Qt就不能畫任何東西(比如你的進度條)。 – Chris 2012-07-19 16:12:09

回答

0

你可以使用Qthread,所以程序的事件循環沒有被阻塞。並通過計時器增加進度條的值或從subprocess.call中讀取信息,或只顯示進程欄中的忙圖標。

相關問題