我有一个功能,运行一些密集的命令,所以我做了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 –