下面是一個帶有進度條的簡單狀態欄的例子,它與一個以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類的屬性。在破壞儀表之前,將其作爲父母的屬性或抓住它。 –