2

ビットマップ ボタンを再配置した直後に wxPython コードで time.sleep を使用すると、ボタンが完全に空白になります。ボタンがあるはずの領域に空白だけが残されました。誰でも理由を説明し、解決策を提案できますか? これが私のコードです:

import wx
import time
class gui(wx.Frame):
  def __init__(self,parent,id):
    wx.Frame.__init__(self,parent,id,'New Window',pos=(0,0),size=wx.DisplaySize())
    panel=wx.Panel(self)
    self.SetBackGroundColour('green')
    self.pic=wx.BitmapButton(self,-1,wx.Image("Candle.jpg",wx.BITMAP_TYPE_ANY).ConvertToBitmap(),pos=(700,300))
    self.Bind(wx.EVT_BUTTON,self.position,self.pic)
  def positon(self,event):
    self.pic.Hide()
    self.pic=wx.BitmapButton(self,-1,wx.Image("Candle.jpg",wx.BITMAP_TYPE_ANY).ConvertToBitmap(),pos=(700,300))
    time.sleep(2)
    self.pic.Hide()
if __name__=='__main__':
  app=wx.PySimpleApp()
  frame=gui(None,-1)
  frame.Show()
  app.MainLoop()
4

4 に答える 4

2

ボタンが空白になるのも不思議ではありません。そうするようにプログラムされています。

    self.pic.Hide() => hides the button
 self.pic=wx.BitmapButton(self,-1,wx.Image("Candle.jpg",wx.BITMAP_TYPE_ANY).ConvertToBitmap(),pos=(700,300)) => displays the button once again
    time.sleep(2) => takes a brake for 2 seconds
    self.pic.Hide() => hides the button again

結論は、ボタンが表示されないということです。ですから、プログラムしたとおりに動作するため、何が問題なのかわかりません。

于 2012-07-07T19:26:40.217 に答える
1

time.sleep() は wx のメインループをブロックし、GUI をスリープ状態にするように指示した時間が経過しても応答しなくなります。いくつかの選択肢があります。wx.Timerを使用するか、スレッド(または類似のもの) を使用できます。ただし、ユースケースではタイマーを使用する方が理にかなっていると思います。

于 2012-07-09T13:36:21.013 に答える
0

sleepがブロックされているため、実行は2秒間位置メソッドでスタックし、MainLoopに戻って、画面への変更のペイントなどの他のイベントを処理できません。2秒が経過すると、画像は非表示になりますが、描画されることはありません。

必要な効果を得るには、タイマーを開始し、タイマーをハンドラーにバインドして、StaticBitmap再度表示できるようにする必要があります。

ちなみに、Show新しいコントロールを作成するのではなく、もう一度呼び出すこともできます。その親は、フレームではなくパネルである必要があります。

于 2012-07-08T22:43:59.237 に答える
0

まあ、それはボタンのイベントで使用された時間スリープでしたか?それが原因であると私は信じています。ボタンは、トリガーしたイベントが終了するのを待って、初期状態に戻ります。

于 2012-07-07T18:21:53.507 に答える