`
xiaoheliushuiya
  • 浏览: 403442 次
文章分类
社区版块
存档分类
最新评论

wxPython跨线程调用

 
阅读更多

版权所有,转载请注明出处:http://guangboo.org/2013/08/23/wxpython-non-gui-thread-call-gui-method

之前有介绍了《wxPython多线程支持》,包含了wx.CallAfter, wx.PostEvent, wxCallLater的用法,本文将wx.CallAfter封装成decorator,使得UI线程中的方法可以在非UI线程中调用。

本文将wx.CallAfter方法进行了封装,代码如下:

import wx

def call_after(func):
    def _wrapper(*args, **kwargs):
        return wx.CallAfter(func, *args, **kwargs)
    return _wrapper

当UI线程中的方法需要被非UI线程调用时,只有使用call_after进行修饰即可。如下对《wxPython多线程》中的实例改进:

import time
import wx
 
from threading import Thread
from wx.lib.pubsub import Publisher

def call_after(func):
    def _wrapper(*args, **kwargs):
        return wx.CallAfter(func, *args, **kwargs)
    return _wrapper

class MyForm(wx.Frame):
    #----------------------------------------------------------------------
    def __init__(self):
        wx.Frame.__init__(self, None, wx.ID_ANY, "Tutorial")
 
        # Add a panel so it looks the correct on all platforms
        panel = wx.Panel(self, wx.ID_ANY)
        self.displayLbl = wx.StaticText(panel, label="Amount of time since thread started goes here")
        self.btn = btn = wx.Button(panel, label="Start Thread")
 
        btn.Bind(wx.EVT_BUTTON, self.onButton)
 
        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(self.displayLbl, 0, wx.ALL|wx.CENTER, 5)
        sizer.Add(btn, 0, wx.ALL|wx.CENTER, 5)
        panel.SetSizer(sizer)
 
        self._thread = Thread(target = self.run, args = ())
        self._thread.daemon = True
        

    def run(self):
        i = 0
        while True:
            i += 1
            time.sleep(1)
            self.updateDisplay('Seconds: %d' % i)

    #----------------------------------------------------------------------
    def onButton(self, event):
        """
        Runs the thread
        """
        self._thread.start()
        self.started = True
        self.displayLbl.SetLabel("Thread started!")
        btn = event.GetEventObject()
        btn.Disable()

    @call_after
    def updateDisplay(self, msg):
        """
        Receives data from thread and updates the display
        """
        self.displayLbl.SetLabel(msg)
 
#----------------------------------------------------------------------
# Run the program
if __name__ == "__main__":
    app = wx.PySimpleApp()
    frame = MyForm().Show()
    app.MainLoop()

源代码下载:demo.py

分享到:
评论

相关推荐

    wxpython多线程防假死与线程间传递消息实例详解

    今天小编就为大家分享一篇wxpython多线程防假死与线程间传递消息实例详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

    Python GUI制作实例 wxPython使用多线程 防假死含wxFormBuilder的文件及源码.rar

    Python GUI制作实例 wxPython使用多线程 防假死含wxFormBuilder的文件及源码

    wxpython写的web摄像头

    自己用wxpython写的web摄像头界面,能显示与其相对应分辨率的rgb565格式的图像。

    wxpython中文教程wxpython中文教程

    wxpython中文教程wxpython中文教程wxpython中文教程wxpython中文教程wxpython中文教程wxpython中文教程wxpython中文教程wxpython中文教程wxpython中文教程

    wxPython几本好书

    几本很不错的关于python gui的wxPython的书,包括“wxPython in Action(中文版)” 活学活用wxPython “《wxPython in Action》Noel Rappin, Robin Dunn著 2006年版”

    wxpython for py2.6

    wxPython是跨平台的。这意味着同一个程序可以不经修改地在多种平台上运行。现今支持的平台有:32位微软Windows操作系统、大多数Unix或类Unix系统、苹果Mac OS X。 由于使用Python作为编程语言,wxPython编写简单、...

    wxpython api

     wxPython是跨平台的。这意味着同一个程序可以不经修改地在多种平台上运行。现今支持的平台有:32位微软Windows操作系统、大多数Unix或类Unix系统、苹果Mac OS X。  由于使用Python作为编程语言,wxPython编写简单...

    分析Python编程时利用wxPython来支持多线程的方法

    wxpython线程安全方法 wxPython中,有三个“线程安全”的函数。如果你在更新UI界面时,三个函数都不使用,那么你可能会遇到奇怪的问题。有时GUI也忙运行挺正常,有时却会无缘无故的崩溃。因此就需要这三个线程安全的...

    python2.4 and wxPython

    python2.4相对应的wxPython,还有很多库,一次性下载,不用费心去找了。

    python用WxPython库实现无边框窗体和透明窗体实现方法详解

    wxPython是作为优秀的跨平台GUI库wxWidgets的Python封装和Python模块的方式提供给用户的。 下面的2个实例代码是实现wxPython窗体特殊效果演示大家可以研究下 wxPython无边框窗体实现代码如下: import wx class ...

    wxPython开发参考书籍

    wxPython开发参考书籍

    使用WxPython进行Win32下Python编程(二) .txt

    使用WxPython进行Win32下Python...然后我们创建一个调用更多的例子,讲述了一些这个工具包中更多的高组特性,使用了你已经熟悉的Doubletalk金融模型的类。(文章是如此,谁知道Doubletalk是个什么东东) 使用wxPython

    wxpython examples

    wxPython 是 Python 语言的 GUI 工具包,作为 Python 的扩展模块实现,包装了 wxWidgets。 wxPython 是跨平台的,开源的。 此资源包含了大部分的wx 实例

    wxPython的wxAuiNotebook实现Tab页效果

    wxPython的wxAuiNotebook实现Tab页效果

    wxPython演示

    wxPython是作为优秀的跨平台GUI库wxWidgets的Python封装和Python模块的方式提供给用户的。 就如同Python和wxWidgets一样,wxPython也是一款开源软件,并且具有非常优秀的跨平台能力,能够支持运行在32位windows、绝...

    wxpython2.8.rar

    wxPython是一个用于创建桌面GUI应用程序的跨平台工具包。wxPython的主要作者是Robin Dunn。使用wxPython,开发人员可以在Windows,Mac和各种Unix系统上创建应用程序。

    wxpython grid.docx

    wxpython grid使用部分

    Part1 wxPython入门

    Part1 wxPython入门 , wxPython入门 , wxPython入门里面有实例讲解

    wxPython-demo-4.0.6_wxpython官方demo_wxPython-demo_wxpython_DEMO_w

    wxpython 学习,各种demo集合,

Global site tag (gtag.js) - Google Analytics