我为一个应用程序编写了一个代码,它将直接比较图像并使用 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_())