1

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_())

私は前にグーグルでスタックオーバーフローを読みましたが、すべての答えQt4PySides. との間に多くの変更がQt5ありQt4ます。And PySideshas 、 isでPySides.QtCore.SIGNAL同等のものを見つけましたが、動作していないようです。PyQt5PyQt5.QtCore.pyqtSignal

4

1 に答える 1