1

谁能告诉我在什么情况下这会失败?

self.next_button.Enable( self.__next_enabled )
assert( self.next_button.Enabled == self.__next_enabled )

我知道这不是类型问题——print self.next_button给出<wx._controls.Button; proxy of <Swig Object of type 'wxButton *' at 0x90ea9c0>. 插入self.next_button.Refresh()没有帮助。也没有wx.Yield()。我还检查了按钮是否被冻结(以防万一),但事实并非如此。

WxPython 版本在 Windows 7 上是 2.9.4.0。我在 Ubuntu 或 Mac 上似乎没有这个问题。

实际上,它甚至比这更奇怪:当我wx.ProgressBar在不同的函数调用中打开 a 时,该按钮似乎神奇地禁用了自身。这里的代码试图重新启用按钮作为解决方法。同样,Ubuntu 和 Mac 上的相同代码永远不会禁用该按钮。

更新

我像这样解决了这个问题:

def reset_button_states( self ):
    self.next_button.Enable( self.__next_enabled )
    if self.next_button.Enabled != self.__next_enabled:
        from threading import Timer
        Timer( 0.1, self.reset_button_states ).start()

我不确定为什么它wx.Yield不起作用,但我暂时会接受它。我仍然想知道为什么Enable呼叫可能会静默失败,以及为什么按钮首先会被如此强烈地禁用。

4

1 回答 1

0

我猜你的 self.__next_enabled 变量有时设置为 False 或 0(零)。如果是这样,那么当您使用 False 调用按钮的 Enable 函数时,它会禁用该按钮。如果您包含一个小的可运行示例,这将有所帮助。

于 2013-02-11T14:28:03.267 回答