首页 > 解决方案 > 有没有办法通过 QStateMachine QState 转换传递信号参数?

问题描述

例如,假设我有一个QButtonBucket包含一些数字N QPushButton的类,并且我想按下这些按钮中的任何一个来导致从某个状态到另一个状态的转换。这很简单:

for button in button_bucket.get_buttons():
    state_1.addTransition(button.clicked, state_2)

但是,假设我想对QPushButton导致转换的源做一些事情,例如如果转换是 from to 则更改其颜色state_1,或者如果转换是 from back tostate_2则可能禁用它state_3state_1

QStateMachine由于 s 的异步性质,我想在逻辑的严格范围内处理这个问题QStateMachine。我不想在QButtonBucket.

如果有一种方法可以获取与 中标识的信号一起传递的参数addTransition,并在进入新状态后对它们进行操作,那将非常完美。但我没有看到一个简单的解决方案来实现它。

有没有一种已知的好方法来实现我想要完成的目标?

标签: pythonpyqtqstatemachine

解决方案


您可以使用QState.assignProperty (self, QObject object, str name, QVariant value)指示状态的函数在进入状态时设置对象的属性。所以可以做这样的事情:

state_1.assignProperty(button, "enabled", false)

推荐阅读