QState: изменение действия при нажатии кнопки QPushbutton - PullRequest
1 голос
/ 17 июня 2020

Прочитав о конечных автоматах, я обнаружил API QState / QStateMachine в QT.

Но теперь я не могу понять, как использовать его для запуска другого кода в зависимости от того, в каком состоянии я сейчас дюйм.

Возьмем следующий пример:

import sys

from PySide2 import QtCore, QtWidgets


class Form(QtWidgets.QDialog):
    def action_a(self):
        print("I'm in mode A")

    def action_b(self):
        print("Mode B is the current mode")

    def __init__(self, parent=None):
        super(Form, self).__init__(parent)

        self.button1 = QtWidgets.QPushButton("Run action")
        self.button2 = QtWidgets.QPushButton("Change State")

        self.layout = QtWidgets.QVBoxLayout()
        self.layout.addWidget(self.button1)
        self.layout.addWidget(self.button2)
        self.setLayout(self.layout)


if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    form = Form()
    form.show()

    state_a = QtCore.QState()
    state_b = QtCore.QState()

    state_a.assignProperty(form.button2, "text", "To state B")
    state_b.assignProperty(form.button2, "text", "To state A")

    state_a.addTransition(form.button2, QtCore.SIGNAL("clicked()"), state_b)
    state_b.addTransition(form.button2, QtCore.SIGNAL("clicked()"), state_a)

    machine = QtCore.QStateMachine()
    machine.addState(state_a)
    machine.addState(state_b)
    machine.setInitialState(state_a)
    machine.start()

    sys.exit(app.exec_())

Что мне нужно добавить к этому коду, чтобы button1.clicked подключался к action_a в state_a, но к action_b когда в state_b?

...