有谁能告诉我在什么情况下这会失败?
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()
也不是。wx.ProgressBar
。我还检查了按钮是否被冻结(以防万一),但事实并非如此。
Windows 7上的WxPython版本是2.9.4.0。我在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()
时,该按钮似乎神奇地禁用了它自己。这里的代码试图重新启用按钮作为解决方法。同样,Ubuntu和Mac上的相同代码永远不会禁用该按钮。
我这样解决了这个问题:
wx.Yield
当Enable
没有时,我不确定为什么会这样,但我会暂时接受它。我仍然想知道为什么{{1}}调用可能会无声地失败以及为什么按钮会在第一时间被强烈禁用。
答案 0 :(得分:0)
我猜你自己.__ next_enabled变量有时设置为False或0(零)。如果是这样,那么当您使用False调用按钮的启用功能时,它会禁用该按钮。如果你包含一个小的可运行的例子,它会有所帮助。