问题:我有一个框架(FirstFrame
类),它有一个调用另一个框架(SecondFrame
类)的按钮。当我点击SecondFrame
中的按钮时,我希望此框架关闭并向{{1}发送一条消息('我在第一帧',见下文) }。
到目前为止,这是我的代码:
FirstFrame
我只是不知道如何连接这两个类。也就是说,在第二帧中单击按钮后,如何与调用它的第一帧进行通信。有什么建议?点击import wx
class FirstFrame(wx.Frame):
def __init__(self, parent, title):
wx.Frame.__init__(self, None, title="First Frame", size=(400,400))
self.UI()
self.Centre()
self.Show()
def UI(self):
self.panel1 = wx.Panel(self, -1)
self.sizer = wx.BoxSizer()
self.sizer.Add(self.panel1, 1, flag=wx.EXPAND)
b = wx.Button(self.panel1, label='second window', size=(100,100), pos=(100,100))
b.Bind(wx.EVT_BUTTON, self.OnB)
self.SetSizer(self.sizer)
def OnB(self, event):
frame = SecondFrame()
frame.Show()
class SecondFrame(wx.Frame):
def __init__(self):
"""Constructor"""
wx.Frame.__init__(self, None, title="Second Frame")
panel = wx.Panel(self)
txt = wx.StaticText(panel, label="I'm the second frame!")
self.button = wx.Button(panel, -1, "Close window and send message", pos = (100,100))
self.button.Bind(wx.EVT_BUTTON, self.onClose)
def onClose(self,event):
self.Close()
#----------------------------------------------------------------------
app = wx.App(False)
FirstFrame(None, title='')
app.MainLoop()
上的按钮后,我想获得的内容与此类似:
提前致谢。
答案 0 :(得分:3)
也就是说,单击第二帧中的按钮后,如何操作 与调用它的第一帧通信。有什么建议吗?
创建第二帧时,请向其发送self
:
frame = SecondFrame(self) #Inside the first Frame, self is the first Frame
或等同地:
first_frame = self
frame = SecondFrame(first_frame)
在第二个Frame的构造函数中执行此操作:
class SecondFrame(wx.Frame):
def __init__(self, first_frame):
"""Constructor"""
wx.Frame.__init__(self, None, title="Second Frame")
self.first_frame = first_frame
然后,在第二个Frame的onclick处理程序中,您可以执行以下操作:
def onClose(self,event):
self.first_frame.do_something("I'm the first frame")
self.Close()
在第一帧中,你可以这样做:
class FirstFrame(wx.Frame):
...
...
def do_something(self, msg):
self.msg = msg #Save the message
print(msg) #Do something else with the message....
或者,在您的特定情况下:
def do_something(self, msg):
wx.StaticText(self.panel1, label="I'm the first frame")
请注意,在第一个Frame构造函数中:
def __init__(self, parent, title):
wx.Frame.__init__(self, None, title="First Frame", size=(400,400))
您不使用父参数或title参数变量,因此为这些变量指定参数不会产生任何结果:
FirstFrame(None, title='')
标题不会是空白,它将是" First Frame"。你想做这样的事情:
class FirstFrame(wx.Frame):
def __init__(self, the_title="First Frame", the_parent=None):
wx.Frame.__init__(
self,
the_parent,
title=the_title,
size=(400,400)
)
self.UI()
self.Centre()
self.Show()
然后,如果你想使用默认值,你可以像这样调用第一个Frame构造函数:
app = wx.App(False)
FirstFrame()
app.MainLoop()
而且,如果你想使用另一个标题,你可以写:
app = wx.App(False)
FirstFrame("Testing")
app.MainLoop()