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のバージョンはWindows7では2.9.4.0です。UbuntuやMacではこの問題は発生していないようです。

実際、これよりも少し奇妙wx.ProgressBarです。別の関数呼び出しでを開くと、ボタンが魔法のように無効になっているようです。ここでのコードは、その回避策としてボタンを再度有効にしようとしています。繰り返しますが、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 (ゼロ) に設定されていると思います。その場合、ボタンの Enable 関数を False で呼び出すと、ボタンが無効になります。小さな実行可能な例を含めると役立ちます。

于 2013-02-11T14:28:03.267 に答える