2016-11-23 54 views
1

我有一種情況,我需要從PySide GUI中的每個測試步驟都通過測試儀的通過/失敗。現在,我正在for循環運行測試套件的數據,並試圖獲取QRadioButton的for循環的當前選中/未選中狀態,我將在其中進行進一步的代碼處理。 我的代碼是: -等待循環,直到QRadioButton每次被檢查?

for i in range(self.ui.hlfDataset_sa_lst.count()): 

    self.ui.pass_radio.setChecked(False) 
    self.ui.fail_radio.setChecked(False) 

    print "command ", str(self.ui.hlfDataset_sa_lst.item(i).text()) 
    print "Run ", str(i)+" is here" 
    ## 
    self.telnetThread = TelnetThread.SocketTunnel("localhost",2000) 
    returnCommand = self.telnetThread.communicateSock(str(self.ui.hlfDataset_sa_lst.item(i).text())) 
    print "returnCommand ",returnCommand 
    ##XML Data structure 
    result = ET.SubElement(results,"result") 
    testcasestepno = ET.SubElement(result,"testcasestepno") 
    testerComment = ET.SubElement(result,"testerComment") 
    testresult = ET.SubElement(result,"testresult") 
    mguImage = ET.SubElement(result,"mguImage") 

    if self.ui.pass_radio.isChecked(): 
     print "TC passed " 
     testcasestepno.text = str(i+1) 
     testresult.text = "PASS" 
     mguImage.text = "NA" 
     testerComment.text=str(self.ui.testercomment_txt.text()) 
    elif self.ui.fail_radio.isChecked(): 
     if not str(self.ui.testercomment_txt.text()): 
      QtGui.QMessageBox.critical(self, 'Tester Comment ', 'Tester Comment is desired ', QtGui.QMessageBox.Ok) 
      self.ui.pass_radio.setChecked(False) 
      self.ui.fail_radio.setChecked(False) 
     else: 
      print "TC failed " 
      testcasestepno.text = str(i+1) 
      testresult.text = "FAIL" 
      testerComment.text = str(self.ui.testercomment_txt.text()) 
      #Save Live Image when failed 

我想for循環要等到測試儀提供了輸入,我不希望把睡眠或以任何方式使用線程,除非顯示便捷的方式。 此代碼在不等待輸入的情況下運行完整循環。

回答

1

如果我正確地理解了你,你想等到if self.ui.pass_radio.isChecked():行之前檢查其中一個按鈕(fail_radiopass_radio)。

在Qt中,您可以使用如下所示的QEventLoop來實現: waiting for a signal,其中您要等待的信號是clicked。在執行它之前,您需要將兩個按鈕的信號連接到quit插槽。對於信號/插槽PyQt的連接,你可以看看這裏: http://pyqt.sourceforge.net/Docs/PyQt5/signals_slots.html

所以,你需要寫的東西,如:自4.5版本

loop = QtCore.QEventLoop() 
self.ui.fail_radio.clicked.connect(loop.quit) 
self.ui.pass_radio.clicked.connect(loop.quit) 
loop._exec() 
+0

在PyQt5例如提供信號連接的語法也適用於PyQt4的。任何人都不太可能使用比4.5更早版本的PyQt4(v4.5在7年前發佈!)。 PyQt4的例子也是「新風格」的語法。有關更多詳細信息,請參見[這裏](http://pyqt.sourceforge.net/Docs/PyQt4/new_style_signals_slots.html)。 –

+0

@three_pineapples,謝謝澄清,我單獨使用Qt和Python,所以我不知道那個...... – ukrkyi

+0

感謝您的回覆,我在176行第14列遇到「exec」。期待: ...在loop.exec() –