【问题标题】:How do I handle multiple EVT_TEXT events in wxPython?如何在 wxPython 中处理多个 EVT_TEXT 事件?
【发布时间】:2013-12-09 19:53:52
【问题描述】:

这是两部分问题的一部分(另一部分是here

所以这就是我要找的:一个绑定到文本控件的EVT_TEXT 事件的函数,它等待几秒钟,然后在延迟时间结束时调用另一个函数。这很容易,但是,我希望它在每次生成新的EVT_TEXT 事件时重置延迟时间。我正在寻找的效果是让用户在文本控件中键入,然后在我假设他们完成后,我运行这个问题的另一部分中描述的函数,该函数会检查他们所写的内容。

所以我尝试的简单方法是:

def OnEdit(self, event):
    for i in range(0,3):
        print i
        time.sleep(1)

但是,无论如何,这只会强制等待 3 秒。如何“闯入”此功能以重置计数器?提前致谢。

编辑:原来这样做的方法是使用线程。伊皮

【问题讨论】:

    标签: python python-2.7 wxpython


    【解决方案1】:

    完整的线程答案,在 this 教程的帮助下构建:

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-08
      • 2021-11-15
      • 2012-08-25
      • 2018-07-26
      • 1970-01-01
      相关资源
      最近更新 更多