在wx.frame和wxpython之间传递值

在wx.frame和wxpython之间传递值,wxpython,Wxpython,我有一个框架,其中有一个TextCtrl和一个按钮。我希望在该TextCTrl中输入一个值,并显示在另一个框架TextCTrl中,并在新框架中使用该值进行计算。如果您有任何想法,我们将不胜感激。不确定您到底想要什么以及想要怎样。如果在同一个应用程序中有两个帧,为什么不能在文本更改事件中从一个textctrl复制到另一个,或者当用户按下某个按钮时(例如,尝试此示例),在这个示例中,如果您键入一个帧,则在wx.EVT_文本的另一个帧中也会显示该帧 import wx app = wx.PySimp

我有一个框架,其中有一个TextCtrl和一个按钮。我希望在该TextCTrl中输入一个值,并显示在另一个框架TextCTrl中,并在新框架中使用该值进行计算。如果您有任何想法,我们将不胜感激。

不确定您到底想要什么以及想要怎样。如果在同一个应用程序中有两个帧,为什么不能在文本更改事件中从一个textctrl复制到另一个,或者当用户按下某个按钮时(例如,尝试此示例),在这个示例中,如果您键入一个帧,则在wx.EVT_文本的另一个帧中也会显示该帧

import wx

app = wx.PySimpleApp()
frame1 = wx.Frame(None, title="Type Here...", pos=(0,0), size=(300,300))
frame2 = wx.Frame(None, title="...to get value here", pos=(310,0), size=(300,300))

tc1 = wx.TextCtrl(frame1)
tc2 = wx.TextCtrl(frame2)

def textChange(event):
    tc2.SetValue(tc1.GetValue())

tc1.Bind(wx.EVT_TEXT, textChange)

app.SetTopWindow(frame1)
frame1.Show()
frame2.Show()

app.MainLoop()

您可以使用pubsub库来实现这一点,但必须注意关闭其中一个帧,以便将数据发送到另一个帧。因此,这种工作方式是基于发布-订阅模式的,在这种模式下,您使用一个订阅者(EVT_listerner),它接收pusblisher能够发送给它的消息。事件将一直侦听,直到发布者框架被销毁,您可以在之后获取收集的数据

下面是一个如何使用它的示例:

import wx
from wx.lib.pubsub import pub 

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

    #----------------------------------------------------------------------
    def __init__(self):
        """Constructor"""
        wx.Frame.__init__(self, None, wx.ID_ANY, "Secondary Frame")
        panel = wx.Panel(self)

        msg = "Enter a Message to send to the main frame"
        instructions = wx.StaticText(panel, label=msg)
        self.msgTxt = wx.TextCtrl(panel, value="")
        closeBtn = wx.Button(panel, label="Send and Close")
        closeBtn.Bind(wx.EVT_BUTTON, self.onSendAndClose)

        sizer = wx.BoxSizer(wx.VERTICAL)
        flags = wx.ALL|wx.CENTER
        sizer.Add(instructions, 0, flags, 5)
        sizer.Add(self.msgTxt, 0, flags, 5)
        sizer.Add(closeBtn, 0, flags, 5)
        panel.SetSizer(sizer)

    #----------------------------------------------------------------------
    def onSendAndClose(self, event):
        """
        Send a message and close frame
        """
        msg = self.msgTxt.GetValue()
        pub.sendMessage("panelListener", message=msg)
        pub.sendMessage("panelListener", message="test2", arg2="2nd argument!")
        self.Close()

########################################################################
class MyPanel(wx.Panel):
    """"""

    #----------------------------------------------------------------------
    def __init__(self, parent):
        """Constructor"""
        wx.Panel.__init__(self, parent)
        pub.subscribe(self.myListener, "panelListener")

        btn = wx.Button(self, label="Open Frame")
        btn.Bind(wx.EVT_BUTTON, self.onOpenFrame)

    #----------------------------------------------------------------------
    def myListener(self, message, arg2=None):
        """
        Listener function
        """
        print "Received the following message: " + message
        if arg2:
            print "Received another arguments: " + str(arg2)

    #----------------------------------------------------------------------
    def onOpenFrame(self, event):
        """
        Opens secondary frame
        """
        frame = OtherFrame()
        frame.Show()

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

    #----------------------------------------------------------------------
    def __init__(self):
        """Constructor"""
        wx.Frame.__init__(self, None, title="New PubSub API Tutorial")
        panel = MyPanel(self)
        self.Show()



#----------------------------------------------------------------------
if __name__ == "__main__":
    app = wx.App(False)
    frame = MyFrame()
    app.MainLoop()
有关发布-订阅模式的更多信息,请查看: \


有关图书馆的更多信息:

致Anurag,谢谢您的回答。我拥有的是一个带有TXTCRL和按钮的框架。当用户输入一个数字并单击“确定”按钮时,它将打开另一帧,该帧也有一个TXTCRL和两个按钮。第二帧的TxtCrtl将显示从第一帧输入的数字,我还需要保留该时间,以便在第二帧中进行计算。我可以捕获并显示它,但无法将其用于计算。