Skip to content Skip to sidebar Skip to footer

How Do I Handle Multiple Evt_text Events In Wxpython?

This is one part of a two part question (other part is here) So here's what I'm looking for: A function which is bound to the EVT_TEXT event of a text control that waits a few seco

Solution 1:

The full threading answer, built with the help of this tutorial:

from threading import *
import wx
import time

EVT_RESULT_ID = wx.NewId()

def EVT_RESULT(win, func):
    win.Connect(-1, -1, EVT_RESULT_ID, func)

class MyGui(wx.Frame):
    def __init__(self):
        self.spellchkthrd = None
        #lots of stuff

        self.input = wx.TextCtrl(self.panel, -1, "", size=(200, 150), style=wx.TE_MULTILINE|wx.TE_LEFT|wx.TE_RICH)        
        self.Bind(wx.EVT_TEXT, self.OnEdit, self.input)
        EVT_RESULT(self, self.OnSplCheck)    

    def OnEdit(self, event):
        if not self.spellchkthrd:
            self.spellchkthrd = SpellCheckThread(self)  
        else:
            self.spellchkthrd.newSig()

    def OnSplCheck(self, event):
        self.spellchkthrd = None
        #All the spell checking stuff

class ResultEvent(wx.PyEvent):
    def __init__(self):
        wx.PyEvent.__init__(self)
        self.SetEventType(EVT_RESULT_ID)

class SpellCheckThread(Thread):
    def __init__(self, panel):
        Thread.__init__(self)
        self.count = 0
        self.panel = panel
        self.start()

    def run(self):
        while self.count < 1.0:
            print self.count
            time.sleep(0.1)            
            self.count += 0.1

        wx.PostEvent(self.panel, ResultEvent())

    def newSig(self):
        print "new"
        self.count = 0

Post a Comment for "How Do I Handle Multiple Evt_text Events In Wxpython?"