2017-01-09 9 views
1

У меня возник вопрос о правильном использовании QStateMachine -System PyQt5.Использовать QState.assignProperty с динамическими значениями во время выполнения

Использование

State.assignProperty(aLineEdit, "plainText", "Some text") 

позволяет установить "Some text" к plainText -свойстве всякий раз, когда aState активен.

Вопрос: Что делать, если "Some text" не является постоянным или не известен перед исполнением? Мое намерение состоит в том, чтобы передать функцию (в отличие от подключения выражения partial или lambda к событию) вместо значения, которое даст соответствующее значение при вводе состояния.

Моя единственная идея эмулировать это поведение - подключить функцию, которая устанавливает свойство в aState.entered. Однако я не доволен этим решением, потому что он смешивает места, где установлены свойства, и причина использования QStateMachine заключается в том, чтобы избежать необходимости вручную устанавливать состояния самостоятельно.

+1

Не будет ли динамическое свойство подорвать логику состояния машины? Если свойство может быть либо «A», либо «B», то это, по-видимому, подразумевает два разных состояния. – ekhumoro

+0

@ekhumoro Можно сказать, что теперь я определяю состояние свойства (выраженное, например, методом), когда соответствующее состояние машины активно. Во всяком случае, я просто надеюсь (г), что есть способ использовать конечный автомат более гибким способом. – aisen

+0

Гибкость обеспечивается сигналами 'enter' и' exit'. – ekhumoro

ответ

0

Ваша единственная идея верна, но вы должны включить ее в вспомогательный метод, чтобы функция вызывалась во время ввода состояния.