谁能告诉我在什么情况下这会失败?
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
呼叫可能会静默失败,以及为什么按钮首先会被如此强烈地禁用。