您好我是python的新手,并已开始使用wxpython开发GUI。我只想知道wxpython中的基本线程操作。我有一个主要的过程,它具有OK &取消按钮和一个从主导出的子过程,使用OK和Cancel按钮。我想实现线程这样一种方式,在主进程上单击确定按钮必须向子进程发送消息,并且子进程必须查找是否有任何进程正在运行,如果是,则必须等待该进程完成,然后接收来自主进程的消息。类似于主进程中的取消按钮。 基本上我想看看子进程如何接收来自主进程的消息,并且两者并行工作。 我正在尝试使用wx.CallAfter和wx.PostEvent,并且我对这里的线程概念感到困惑。请有人帮助我。 在此先感谢线程在wxpython
0
A
回答
0
wxpython中的多线程与python没有区别。 wx.CallAfter and threading example显示您如何使用两者。 wx.CallAfter等待事件完成并在主线程中运行处理程序。另外,您可以使用定时器(wx.Timer)来检查子进程并发送/接收数据。
这是一个链接wx.PostEvent显示如何使用它。在这个例子中,你创建自定义事件,将它绑定到主线程中的处理程序。之后,您将该事件发布到工作线程中并附加一些数据。您的事件处理程序接收事件并在主线程中执行一些操作。
因此,有产生重要的问题,当你使用多线程
- 当启动子线程,
- 这是线程之间使用的通信机制,
- 如何停止线程安全这样在必要的时候,
等
我会预fer wx.Timer +队列模块。我可以定期用定时器或用户事件检查队列,并通过队列发送一些内容(即无)来停止线程。
注意:主线程中长时间运行的作业会导致GUI无响应。
0
我说得对。 THanks to @ozy
import threading
import wx
from threading import Thread
ID_RUN = 101
ID_RUN2 = 102
class ChildThread(Thread):
def __init__(self, myframe):
"""Init Worker Thread Class."""
Thread.__init__(self)
self.myframe = myframe
def run(self):
wx.CallAfter(self.myframe.AfterRun, 'Ok button pressed')
class MyFrame(wx.Frame):
def __init__(self, parent, ID, title):
wx.Frame.__init__(self, parent, ID, title)
panel = wx.Panel(self, -1)
mainSizer = wx.BoxSizer(wx.HORIZONTAL)
mainSizer.Add(wx.Button(panel, ID_RUN, "OK"))
mainSizer.Add(wx.Button(panel, ID_RUN2, "Cancel"))
panel.SetSizer(mainSizer)
mainSizer.Fit(self)
wx.EVT_BUTTON(self, ID_RUN, self.onRun)
wx.EVT_BUTTON(self, ID_RUN2, self.onRun2)
def onRun(self, event):
self.child = ChildThread(myframe=self)
self.child.daemon = True
self.child.start()
def onRun2(self, event):
self.child2 = threading.Thread(None, self.__run)
self.child2.daemon = True
self.child2.start()
def __run(self):
wx.CallAfter(self.AfterRun, "Cancel button pressed")
def AfterRun(self, msg):
dlg = wx.MessageDialog(self, msg, "Message", wx.OK | wx.ICON_INFORMATION)
dlg.ShowModal()
dlg.Destroy()
class MyApp(wx.App):
def OnInit(self):
frame = MyFrame(None, -1, "My GUI")
frame.Show(True)
frame.Centre()
return True
app = MyApp(0)
app.MainLoop()
+0
我如何让一个ChildThread等待一个进程(任何)完成,然后继续显示一个对话框? – PythonDev
相关问题
- 1. wxPython线程下载
- 2. Python PYserial WxPython线程
- 3. 线程,wxPython的和状态
- 4. 线程的wxPython和XMLRPC
- 5. wxPython:多线程帮助
- 6. 在WxPython GUI线程上运行函数
- 7. wxpython关闭线程的应用程序
- 8. 如何调试在wxpython/python线程中崩溃的wxpython应用程序
- 9. 如何停止wxpython中的线程?
- 10. SimpleXMLRPCServer,wxPython和线程 - 如何停止?
- 11. wxpython线程文本控件延迟
- 12. 多线程与matplotlib和wxPython的
- 13. wxPython线程化的UDP服务器
- 14. 在wxpython中创建删除线listctrl
- 15. WxPython GUI编程。
- 16. WXpython教程
- 17. 使用线程在wxPython中不断更新GUI的好方法?
- 18. 如何让wxpython在单元测试中捕获线程事件?
- 19. 如何在Python中同步wxpython Gauge小部件和线程?
- 20. 线程与pubsub投掷AssertionError:'callableObj不可调用'在wxPython
- 21. 添加面板使用线程GUI来在wxPython中
- 22. wxpython应用程序崩溃使用多线程pjsip
- 23. WxPython和ShowMeDo教程
- 24. Wxpython动态编程
- 25. 在wxPython
- 26. 在wxPython
- 27. 在MSYS2中的wxPython:线程处理程序中的SetLabel导致冻结?
- 28. 即使在关闭WxPython应用程序后,Python线程仍会运行
- 29. wxpython为什么不让我在一个线程中运行wx应用程序?
- 30. wxpython线程化任务并更新GUI原因
我喜欢wx.lib.delayedresult这类问题。 “在没有线程的情况下在wx Python中执行长进程”http://showmedo.com/videotutorials/video?name=8770000&fromSeriesID=877 – otterb