2016-11-23 3 views
1

Ich habe eine Situation, wo ich Pass/Fail von Tester für jeden Testschritt in PySide GUI erhalten muss. Jetzt laufen die Daten der Testsuite in for-Schleife und versuchen, den aktuellen Status von QRadioButton in der for-Schleife zu bekommen, basierend auf welcher ich weitere Code-Verarbeitung machen werde. Mein Code ist: -Warten auf Schleife bis QRadioButton werden jedes Mal überprüft?

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 

ich für Schleife will warten, bis Tester den Eingang zur Verfügung gestellt hat, und ich will nicht schlafen oder in irgendeiner Weise setzen Thread zu verwenden, es sei denn, bequeme Art und Weise dargestellt ist. Dieser Code führt eine vollständige Schleife aus, ohne auf Eingaben zu warten.

Antwort

1

Wenn ich Sie richtig verstanden habe, möchten Sie warten, bis einer der Knöpfe (fail_radio oder pass_radio) vor if self.ui.pass_radio.isChecked(): Linie geprüft wird.

In Qt können Sie erreichen dies wie hier mit QEventLoop: waiting for a signal, wo Signal, das Sie für clicked ist, warten soll. Sie müssen die Signale beider Tasten vor der Ausführung an den Steckplatz quit anschließen. Für Signal/Slot-in PyQt verbinden Sie können hier: http://pyqt.sourceforge.net/Docs/PyQt5/signals_slots.html

Sie müssen also so etwas wie schreiben:

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

Die Syntax für die Signalverbindung im PyQt5 vorgesehen Beispiel funktioniert auch für PyQt4 seit Version 4.5. Es ist sehr unwahrscheinlich, dass jemand eine Version von PyQt4 älter als 4.5 verwendet (v4.5 wurde vor über 7 Jahren veröffentlicht!). Die Syntax des "neuen Stils" wird daher auch für PyQt4-Beispiele bevorzugt! Weitere Informationen finden Sie [hier] (http://pyqt.sourceforge.net/Docs/PyQt4/new_style_signals_slots.html). –

+0

@ three_pineapples, ich danke Ihnen für die Klarstellung, ich benutze Qt und Python getrennt, so dass ich nicht wusste, dass ... – ukrkyi

+0

Vielen Dank für die Respone, ich bekam "Exec" in Zeile 176, Spalte 14. Erwartete: ... at loop.exec() –