【发布时间】:2020-05-18 13:28:06
【问题描述】:
我正在尝试在我的 GUI 中实现状态机(使用 python3.8 和 Qt5(使用 PyQt5 而不是 PySides!))。我遇到的问题是在添加基于事件的转换时。
使用下面的代码,解释器在第 26 行抱怨:
s1.addTransition(self.btn_start, pyqtSignal("clicked()"), s2)
TypeError: C++ type 'clicked()' is not supported as a pyqtSignal() type argument type
import sys
import logging
from PyQt5.QtWidgets import QWidget, QPushButton, QVBoxLayout, QApplication
from PyQt5.QtCore import QStateMachine, QState, QFinalState, pyqtSignal
class TabTest(QWidget):
def __init__(self, parent=None):
super().__init__(parent)
self.logger = logging.getLogger("TABTEST")
self.btn_start = QPushButton("START")
# self.btn_start.clicked.connect(self.btn_start_clicked)
layout = QVBoxLayout()
layout.addWidget(self.btn_start)
self.setLayout(layout)
machine = QStateMachine()
s1 = QState()
s1.assignProperty(self.btn_start, "TEXT", "CLICK ME")
s2 = QFinalState()
s1.addTransition(self.btn_start, pyqtSignal("clicked()"), s2)
machine.addState(s1)
machine.addState(s2)
machine.setInitialState(s1)
machine.start()
# def btn_start_clicked(self):
# self.logger.info("klikked")
if __name__ == "__main__":
app = QApplication(sys.argv)
main_window = TabTest()
main_window.show()
sys.exit(app.exec_())
我之前在 Google 上搜索过并阅读了 stackoverflow,但所有答案都是针对 Qt4 或正在使用 PySides。 Qt5 和 Qt4 之间有很多变化。
而PySides 有PySides.QtCore.SIGNAL,我发现PyQt5 中的等价物是PyQt5.QtCore.pyqtSignal,但似乎无法正常工作。
【问题讨论】:
标签: python python-3.x pyqt5 qt-signals qstatemachine