2

私は最初の 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()

お時間をいただきありがとうございます。アドバイスをいただきありがとうございます。

4

2 に答える 2

1

getinfos 関数/メソッドをスレッドに入れます。タイトルが変更されたら、スレッドで wx.CallAfter または wx.PostEvent (どちらもスレッドセーフ) を使用して、GUI に更新を指示します。スレッドに入れないと、GUI が非常に応答しなくなります。

Pubsub は動作しますが、wxPython のメイン ループで getinfos 関数を実行している場合、この場合はブロックされるため機能しません。ただし、前述のスレッドセーフなメソッドと組み合わせて、スレッドで pubsub を使用できます。

于 2012-06-22T13:44:02.387 に答える
0

カスタムwxイベントを送信するか、 pubsubをセットアップできます。

于 2012-06-22T09:02:43.857 に答える