等待循环直到 QRadioButton 每次都被检查?
Waiting in for loop until QRadioButton get checked everytime?
在 PySide GUI 中,我需要从测试人员那里获取每个测试步骤的 Pass/Fail。现在测试套件的数据我在 for 循环中 运行 并试图在 for 循环中获取 QRadioButton 的当前 checked/unchecked 状态,我将根据它进行进一步的代码处理。
我的代码是:-
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
我想让循环一直等到测试人员提供了输入,并且我不想让睡眠或以任何方式使用线程,除非显示方便的方法。
此代码无需等待输入即可运行完整循环。
如果我没理解错的话,您要等到 if self.ui.pass_radio.isChecked():
行之前检查其中一个按钮(fail_radio
或 pass_radio
)。
在 Qt 中,您可以使用 QEventLoop 实现此目的,如下所示:
waiting for a signal,您要等待的信号是clicked
。在执行之前,您需要将两个按钮的信号连接到 quit
插槽。对于 signal/slot 在 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()
在 PySide GUI 中,我需要从测试人员那里获取每个测试步骤的 Pass/Fail。现在测试套件的数据我在 for 循环中 运行 并试图在 for 循环中获取 QRadioButton 的当前 checked/unchecked 状态,我将根据它进行进一步的代码处理。 我的代码是:-
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
我想让循环一直等到测试人员提供了输入,并且我不想让睡眠或以任何方式使用线程,除非显示方便的方法。 此代码无需等待输入即可运行完整循环。
如果我没理解错的话,您要等到 if self.ui.pass_radio.isChecked():
行之前检查其中一个按钮(fail_radio
或 pass_radio
)。
在 Qt 中,您可以使用 QEventLoop 实现此目的,如下所示:
waiting for a signal,您要等待的信号是clicked
。在执行之前,您需要将两个按钮的信号连接到 quit
插槽。对于 signal/slot 在 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()