GUIにステートマシンを実装しようとしています(python3.8とQt5を使用しています(PySideではなくPyQt5を使用しています!))。これで発生する問題は、イベントに基づいてトランジションを追加する場合です。
以下のコードを使用すると、インタープリターは 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_())
私は前にグーグルでスタックオーバーフローを読みましたが、すべての答えQt4
はPySides
. との間に多くの変更がQt5
ありQt4
ます。And PySides
has 、 isでPySides.QtCore.SIGNAL
同等のものを見つけましたが、動作していないようです。PyQt5
PyQt5.QtCore.pyqtSignal