我有一個功能,運行一些密集的命令,所以我做了Spinner
類,這只是一個簡單的窗口出現與wx.Gauge
部件在加載期間脈衝。wxPython:框架類加載幾個命令後,它被稱爲
問題是,在Run
中調用時,窗口在初始化幾秒後纔出現 - self.TriangulatePoints()
實際上在窗口出現之前完成。事實上,如果我不註釋掉load.End()
(它關閉窗口),Spinner
實例將出現並立即消失。
我認爲這與線程有關,程序繼續運行,而Spinner
啓動。是這樣嗎?如果是這樣,你可以暫停Run()
的進展,直到Spinner
窗口出現?
還應該注意的是,調用Spinner(...)
後運行time.sleep(n)
在程序序列中不會改變,它會出現在屏幕上。
def Run(self, event):
gis.points_packed = False
gis.triangulated = False
load = Spinner(self, style=wx.DEFAULT_FRAME_STYLE & (~wx.CLOSE_BOX) & (~wx.MAXIMIZE_BOX)^(wx.RESIZE_BORDER) & (~wx.MINIMIZE_BOX))
load.Update('Circle packing points...')
gis.boundary(infile=gis.loaded_boundary)
load.Pulse()
self.GetPoints(None, show=False)
load.Update("Triangulating nodes...")
self.TriangulatePoints(None, show=True)
load.End()
########################################################
class Spinner(wx.Frame):
def __init__(self, *args, **kwds):
super(Spinner, self).__init__(*args, **kwds)
self.SetSize((300,80))
self.SetTitle('Loading')
process = "Loading..."
self.font = wx.Font(pointSize = 12, family = wx.DEFAULT,
style = wx.NORMAL, weight = wx.BOLD,
faceName = 'Arial')
self.process_txt = wx.StaticText(self, -1, process)
self.process_txt.SetFont(self.font)
self.progress = wx.Gauge(self, id=-1, range=100, pos=(10,30), size=(280,15), name="Loading")
self.Update(process)
self.Centre()
self.Show(True)
def End(self):
self.Close(True)
def Update(self,txt):
dc = wx.ScreenDC()
dc.SetFont(self.font)
tsize = dc.GetTextExtent(txt)
self.process_txt.SetPosition((300/2-tsize[0]/2,10))
self.process_txt.SetLabel(txt)
self.progress.Pulse()
def Pulse(self):
self.progress.Pulse()
什麼錯誤使用wx.SplashScreen? – Igor
好的,這是一個更大的基於wx的應用程序的一小部分 - 當按下工具欄按鈕時,「運行」功能實際上被調用。由於我在主'wx.Frame'中有內容,所以重要的是我有一個外部窗口出現。 –
https://wiki.wxpython.org/LongRunningTasks –