考虑一下:
import wx, time
# STEP 1: Setup Window
class Window(wx.Frame):
def __init__(self,parent,id):
wx.Frame.__init__(self,parent,id,'Bobby the Window', size=(300,200))
panel = wx.Panel(self)
self.Bind(wx.EVT_CLOSE, self.closewindow)
wx.StaticText(panel, -1, "Yo user, the program is busy doing stuff!", (50,100), (200,100))
def closewindow(self, event):
self.Destroy()
# STEP 2: Show Window (run in background, probably with threading, if that is the best way)
if __name__=='__main__':
app = wx.PySimpleApp()
frame = Window(parent=None,id=-1)
frame.Show()
app.MainLoop()
# STEP 3: Do work
time.sleep(5)
# STEP 4: Close Window, and show user evidence of work
## *Update window to say: "I am done, heres what I got for you: ^blah blah info!^"*
exit()
我的问题是:
这类似于我关于如何运行cli进度条并同时工作的问题,除了使用gui窗口。
我知道要更改StaticText,我会'text.SetLabel(“BLAH!”)',但如果它在后台运行,我将如何与窗口类进行通信?
更新 This thread也有所帮助。
答案 0 :(得分:1)
如果需要执行长时间运行的进程,则必须使用某种类型的线程或多处理模块。否则,您将阻止GUI的主循环并使其无响应。您还需要使用wxPython的线程安全方法与线程中的GUI进行通信。它们是wx.CallAfter,wx.CallLater和wx.PostEvent。
您可以在以下内容中阅读有关wxPython和线程的更多信息: