我正在尝试编写我的第一个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()
感谢您的时间,感谢任何建议。
答案 0 :(得分:0)
您可以发送custom wx event或设置pubsub。
答案 1 :(得分:0)
将getinfos函数/方法放入线程中。当标题改变时,让线程使用wx.CallAfter或wx.PostEvent(两者都是线程安全的)来告诉GUI更新。如果你没有把它放到一个线程中,那么你的GUI就会非常反应迟钝。
Pubsub摇滚,但如果您在wxPython主循环中运行getinfos函数,则无法在这种情况下工作,因为它会阻止它。你可以在线程中使用pubsub和我提到的那些线程安全方法。