Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:如何显示对话框窗口并同时工作_Python_Multithreading_Wxpython - Fatal编程技术网

Python:如何显示对话框窗口并同时工作

Python:如何显示对话框窗口并同时工作,python,multithreading,wxpython,Python,Multithreading,Wxpython,考虑这一点: 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.

考虑这一点:

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()
我的问题是:

  • 在第4步中,如何更改窗口中的文本(尤其是在线程中)
  • 在步骤2中,我如何在后台运行窗口,但仍然能够与它通信?(更新文本等)
这类似于我的问题,即如何运行cli进度条并同时工作,gui窗口除外

我知道要更改StaticText,我会执行“text.SetLabel”(“BLAH!”),但是如果window类在后台运行,我该如何与它通信呢

更新:
还有一些帮助。

如果需要执行长时间运行的进程,则必须使用某种类型的线程或多处理模块。否则,您将阻塞GUI的主循环并使其无响应。您还需要使用wxPython的线程安全方法从线程与GUI通信。它们是wx.CallAfter、wx.CallLater和wx.PostEvent

您可以在以下位置阅读有关wxPython和线程的更多信息:


如果需要执行长时间运行的进程,则必须使用某种类型的线程或多处理模块。否则,您将阻塞GUI的主循环并使其无响应。您还需要使用wxPython的线程安全方法从线程与GUI通信。它们是wx.CallAfter、wx.CallLater和wx.PostEvent

您可以在以下位置阅读有关wxPython和线程的更多信息: