在Python中将事件绑定到变量

3 投票
2 回答
1247 浏览
提问于 2025-04-17 08:29

有没有办法在Python或wxPython中把一个事件绑定到一个变量上?就像这样:

    self.Bind(EVT_ONCHANGE_VAR, self.mycallback, variable_to_watch)

这样的话,可以根据这个变量的值来决定一个对话框是显示还是隐藏。

谢谢!

2 个回答

2

如果你想在一个类的实例上监控某个属性的变化,可以通过为这个类写一个自定义的 __setattr__() 方法来实现。当某个特定的属性发生变化时,这个方法会发出通知。虽然你也可以使用属性(property),但这样的话每个属性都得单独写一个。

至于变量的监控,就要复杂得多了;因为Python没有内置的机制来做到这一点。所以你需要使用一个叫做trace hook的东西,在每行代码执行后检查变量的状态。这种方法会让你的程序运行变慢,但确实是可行的。

3

traits 这个工具可以让你在某个值发生变化时收到通知。

在你的情况下,你可以把 variable_to_watch 变成一个 property

class C(object):
    def __init__(self):
        self._x = None

    @property
    def x(self):
        return self._x

    @x.setter
    def x(self, value):
        self._x = value
        self.show_hide_dialog() # or generate an event in general
    # ...

撰写回答