Ожидание цикла, пока QRadioButton не будет проверяться каждый раз?
У меня есть ситуация, когда мне нужно получить Pass/Fail от тестера для каждого шага тестирования в PySide GUI. Теперь данные testuite, в котором я запускаю цикл for и пытаюсь получить текущее проверенное / непроверенное состояние цикла QRadioButton for, на основе которого я буду выполнять дальнейшую обработку кода. Мой код:-
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
Я хочу, чтобы цикл ожидал до тех пор, пока тестер не предоставил входные данные, и я не хочу переводить в спящий режим или в любом случае использовать поток, если не указан удобный способ. Этот код выполняет полный цикл без ожидания ввода.
1 ответ
Если я вас правильно понял, нужно подождать, пока одна из кнопок (fail_radio
или же pass_radio
) проверяется перед if self.ui.pass_radio.isChecked():
линия.
В Qt вы можете добиться этого, используя QEventLoop, как здесь: ожидание сигнала, где сигнал, который вы хотите ждать, это clicked
, Вам нужно подключить сигналы обеих кнопок к quit
слот до его выполнения. Для соединения сигнал / слот в PyQt вы можете посмотреть здесь: http://pyqt.sourceforge.net/Docs/PyQt5/signals_slots.html
Так что вам нужно написать что-то вроде:
loop = QtCore.QEventLoop()
self.ui.fail_radio.clicked.connect(loop.quit)
self.ui.pass_radio.clicked.connect(loop.quit)
loop._exec()