ここには、進捗バーが表示され、サブプロセスと対話してping
を呼び出している例があります。
うまくいけば、あなたはそれからいくつかの走行距離を得るでしょう。
import wx
import subprocess
class MainFrame(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, title='Statusbar progress')
panel = wx.Panel(self)
start_btn = wx.Button(panel, label='Start')
start_btn.Bind(wx.EVT_BUTTON, self.OnStart)
stop_btn = wx.Button(panel, label='Stop')
stop_btn.Bind(wx.EVT_BUTTON, self.OnStop)
self.Bind(wx.EVT_CLOSE, self.OnExit)
btn_sizer = wx.BoxSizer(wx.HORIZONTAL)
btn_sizer.Add(start_btn)
btn_sizer.Add(stop_btn)
panel.SetSizer(btn_sizer)
self.statusbar = self.CreateStatusBar(3)
self.text1 = wx.StaticText(self.statusbar,-1,("Static text"))
self.text2 = wx.StaticText(self.statusbar,-1,("Count Text"))
self.progress_bar = wx.Gauge(self.statusbar, -1, style=wx.GA_HORIZONTAL|wx.GA_SMOOTH)
sizer = wx.BoxSizer(wx.HORIZONTAL)
sizer.Add(self.text1, 0, wx.ALL, 5)
sizer.Add(self.text2, 1, wx.ALL, 5)
sizer.Add(self.progress_bar, 2, wx.ALL, 5)
self.statusbar.SetSizer(sizer)
self.Show()
self.progress_bar.SetRange(50)
self.progress_bar.SetValue(0)
def OnStart(self,event):
self.text1.SetLabelText("Started")
self.count = 0
self.proc = subprocess.Popen(['ping','127.0.0.1','-i','0.2'],stdin=subprocess.PIPE, stdout=subprocess.PIPE,stderr=subprocess.PIPE)
while True:
try:
list_data = self.proc.stdout.readline()
except:
break
if len(list_data) == 0:
break
self.progress_bar.Pulse()
self.count+=1
self.text2.SetLabelText("Count "+str(self.count))
wx.Yield()
def OnStop(self,event):
self.text1.SetLabelText("Stopped")
try:
self.proc.kill()
except:
pass
def OnExit(self,event):
try:
self.proc.kill()
except:
pass
self.Destroy()
if __name__ == '__main__':
app = wx.App()
frame = MainFrame()
app.MainLoop()
あなたはstatusbar
は、アイテムの位置と相対的なサイズを可能サイザーを使用して構築されて見ることができるように。
私はStart
ボタンを追加して、私が破壊使用した場合、今Stop
は別のエラーが現れたプログラム
を終了しません()。これは次のとおりです:raise PyDeadObjectError(self.attrStr%self._name) PyDeadObjectError:GaugeオブジェクトのC++部分が削除されましたが、属性アクセスは許可されなくなりました。このエラーをどのように克服するのですか? –
文字列をGaugeクラスの属性として格納しないでください。それを親の属性にするか、ゲージを破壊する前にそれをつかみなさい。 –