我们经常会用到两个窗口之间互相传递信息,或者把一个窗口里,文本框输入的值,传递到另外一个frame的另外一个文本框里,
这个时候,我们可以使用wxpython的pub/sub方法。
test.py
class Main(wx.App):
def __init__(self):
#mainFrame 是用wxglade画的一个frame导出来的python文件
self.frame1 = mainFrame.MyFrame(None, wx.ID_ANY, "")
self.frame1.Show()
self.children=test2.children()
#定义一个name1属性,值来自于窗口上的文本框控件
self.name1 = self.frame1.text_ctrl_1
# 离开焦点,就把fram1的文本框里的值传入children的另外一个文本框内
self.name1 .Bind(wx.EVT_COMMAND_KILL_FOCUS, self.save)
#发布一个叫in_sync的主题,触发sync函数
pub.subscribe(self.sync, "in_sync")
def sync(self, msg):
#给children的text_ctrl_2字段设置值
self.children.frame.text_ctrl_2.SetValue(msg)
def save(self,evt):
value=self.name1.GetValue()
#调用一下in_sync方法,如果in_sync方法在别的class里,
#也是可以调用pub.sendMessage成功的
self.children.in_sync(value)
test2.py
class children(wx.App):
def __init__(self):
#mainFrame 是用wxglade画的一个frame导出来的python文件
self.frame = mainFrame.MyFrame(None, wx.ID_ANY, "")
self.frame.Show()
def in_sync(text):
#订阅"in_sync"主题
wx.CallAfter(pub.sendMessage, "in_sync", msg=text)