【问题标题】:Waiting in for loop until QRadioButton get checked everytime?等待循环直到 QRadioButton 每次都被检查?
【发布时间】:2016-11-23 09:50:03
【问题描述】:

我有一种情况,我需要为 PySide GUI 中的每个测试步骤从测试人员那里获得通过/失败。现在测试套件的数据我正在 for 循环中运行,并试图在 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 循环等到测试人员提供输入并且我不想让睡眠或无论如何使用线程,除非显示方便的方式。 此代码运行完整循环,无需等待输入。

【问题讨论】:

    标签: python pyqt pyside


    【解决方案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

    所以你需要这样写:

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

    【讨论】:

    • PyQt5 示例中提供的信号连接语法从 4.5 版开始也适用于 PyQt4。不太可能有人使用 4.5 之前的 PyQt4 版本(v4.5 是 7 年前发布的!)。因此,PyQt4 示例也首选“新样式”语法!有关详细信息,请参阅here
    • @three_pineapples,感谢您的澄清,我分别使用 Qt 和 Python,所以我不知道...
    • 感谢您的回复,我在第 176 行第 14 列遇到了“exec”。期待: ... 在 loop.exec()
    • 好的,它的循环。_exec()
    • @PawankumarDubey,嘿,对不起
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-15
    • 2021-07-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多