1

我为一个应用程序编写了一个代码,它将直接比较图像并使用 Pyside2 提供输出。输出将显示在 GUI 以及使用 Pyfirmata 通过 Arduino Uno 连接的 LED 中。现在,我希望我的程序在虚拟模式(通过 GUI“运行”按钮)和物理模式(通过 Arduino Uno 中连接的按钮。按下此按钮时,代码的运行部分将执行)。

我试图通过在Pyside2 代码主体中编写 while 循环(读取按钮状态并在单击时执行代码)来实现这一点。但是,当执行时,只有物理模式(通过按钮)在工作,我无法使用 GUI 的运行按钮。也就是说,当点击按钮时,GUI 执行程序,然后进入无响应状态。它会一直保持这种状态,直到再次单击按钮。我无法完全使用 GUI 的运行按钮。

我是 Python、Pyside 和 Pyfirmata 的新手。有人可以帮我吗?

代码是这样的。

class Ui_xxx(object):
    

    def setupUi(self, xxx):
        content
        self.retranslateUi(xxx)
        QtCore.QMetaObject.connectSlotsByName(xxx)

        self.button1.clicked.connect(self.button1)
        self.button2.clicked.connect(self.button2)
        self.button3.clicked.connect(self.button3)
        self.button4.clicked.connect(self.button4)
        self.say_run.clicked.connect(self.say_run)
  

    def retranslateUi(self, xxx):
        content

    def button1(self):
        content
                
        
    def button2(self):
        content
        
    def button3(self):
        content
        self.say_run()  
        
    def button4(self):
        content

    def say_run(self):
        QtCore.QCoreApplication.processEvents()
        content
        if os.listdir(dir1) == []:
            content
            
        else:   
            content

@goto.with_goto
def main():
    global board
    board = pyfirmata.Arduino('COM3')
    import sys
    app = QtWidgets.QApplication(sys.argv)
    xxx = QtWidgets.QMainWindow()
    ui = Ui_xxx()
    ui.setupUi(xxx)
    xxx.show()
    time.sleep(5)    
    it = pyfirmata.util.Iterator(board)
    it.start()
    digital_input = board.get_pin('d:5:i')
    def ws():
        while True:
            sw = digital_input.read()
            if sw is True:
                board.digital[12].write(1)
                time.sleep(5)
                board.digital[12].write(0)
                time.sleep(5)
                ui.say_run()
                QtCore.QCoreApplication.processEvents()
                break
    
    label .loop101
    ws()
    QtCore.QCoreApplication.processEvents()
    goto .loop101

    board.exit()
    sys.exit(app.exec_())

4

0 回答 0