如何更新GUI中的textctrl内容?

时间:2012-06-22 04:15:10

标签: events wxpython

我正在尝试编写我的第一个wxpython GUI程序,在我的程序中,我想获得一个软件窗口的标题,如果标题更改,清除旧标题并在GUI中显示新标题,我在cmd中测试,它可以在循环中获取标题,但我不知道如何在GUI中设置事件来更新标题。

我的代码:

def getinfos():
    tempWindowName=win32gui.GetWindowText (find_window())
    while True:
        titles=[]
        if (tempWindowName==win32gui.GetWindowText (find_window())):
            pass
        else:
            tempWindowName=win32gui.GetWindowText (find_window())               
            titles.append(tempWindowName)

            return title[0]

    time.sleep(1000)  

和GUI代码:

import controller2
import time

########################################################################
class InfoPanel(wx.Panel):

    #----------------------------------------------------------------------
    def __init__(self, parent):
        """Constructor"""
        wx.Panel.__init__(self, parent)

        try:
            self.titleResults = controller2.getinfos()                            
        except:               
            self.titleResults = 'no data'


        mainSizer = wx.BoxSizer(wx.VERTICAL)

        self.titlecontent = wx.TextCtrl(self, -1, "", style=wx.TE_MULTILINE|wx.TE_RICH|wx.TE_LEFT|wx.TE_WORDWRAP|wx.NO_BORDER)                                                                                                                    
        self.titlecontent.SetBackgroundColour('white')
        self.settitle()

        mainSizer.Add(self.yejicontent, 2.5, wx.ALL|wx.EXPAND, 5)

        self.SetSizer(mainSizer)


    #----------------------------------------------------------------------
    def settitle(self):


        self.titlecontent.SetValue("%s"%self.titleResults)



########################################################################
class InfoFrame(wx.Frame):
    """"""

    #----------------------------------------------------------------------
    def __init__(self):
        """Constructor"""
        wx.Frame.__init__(self, None, title="title",size=(500, 880))
        panel = InfoPanel(self)
        style= self.GetWindowStyle()
        self.SetWindowStyle(style|wx.STAY_ON_TOP)


class MyApp(wx.App):
    def OnInit(self):
        self.infoFrame=InfoFrame()        
        self.SetTopWindow(self.infoFrame)
        self.infoFrame.Show(True)        
        return True

#----------------------------------------------------------------------
if __name__ == "__main__":
    app = MyApp(False)
    app.MainLoop()

感谢您的时间,感谢任何建议。

2 个答案:

答案 0 :(得分:0)

您可以发送custom wx event或设置pubsub

答案 1 :(得分:0)

将getinfos函数/方法放入线程中。当标题改变时,让线程使用wx.CallAfter或wx.PostEvent(两者都是线程安全的)来告诉GUI更新。如果你没有把它放到一个线程中,那么你的GUI就会非常反应迟钝。

Pubsub摇滚,但如果您在wxPython主循环中运行getinfos函数,则无法在这种情况下工作,因为它会阻止它。你可以在线程中使用pubsub和我提到的那些线程安全方法。