我想知道如何从wx笔记本将一页中的变量转换为另一页中的变量。我想如果我知道变量名称和页面ID,应该有某种方法可以引用变量。例如,如果我有以下代码,如何从面板y引用变量x,反之亦然
import wx
class PanelX(wx.Panel):
def __init__(self, parent):
wx.Panel.__init__(self, parent)
x = 3
class PanelY(wx.Panel):
def __init__(self, parent):
wx.Panel.__init__(self, parent)
y=4
class MainFrame(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, title="Main Frame", size = (500,450))
p = wx.Panel(self)
nb = wx.Notebook(p)
nb.AddPage(PanelX(nb), "Panel X")
nb.AddPage(PanelY(nb), "Panel Y")
sizer = wx.BoxSizer()
sizer.Add(nb, 1, wx.EXPAND)
p.SetSizer(sizer)
if __name__ == "__main__":
app = wx.App()
MainFrame().Show()
app.MainLoop()
Run Code Online (Sandbox Code Playgroud)
您在面板中创建的变量不会在类中“保存”-它们是构造函数中使用的局部变量,并在执行该方法后立即从内存中将其丢弃。
您必须在变量前面加上“ self”来创建变量-self.x = 3这将创建“实例变量”-根据其所属的类实例而具有不同值的变量。
您可以使用Notebook的GetPage方法从笔记本获取页面。这是修改后的示例:
import wx
class PanelX(wx.Panel):
def __init__(self, parent):
wx.Panel.__init__(self, parent)
self.x = 3
class PanelY(wx.Panel):
def __init__(self, parent):
wx.Panel.__init__(self, parent)
self.y = 4
class MainFrame(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, title="Main Frame", size = (500,450))
p = wx.Panel(self)
nb = wx.Notebook(p)
nb.AddPage(PanelX(nb), "Panel X")
nb.AddPage(PanelY(nb), "Panel Y")
sizer = wx.BoxSizer()
sizer.Add(nb, 1, wx.EXPAND)
p.SetSizer(sizer)
page = nb.GetPage(0)
print "PanelX's X value is %s" % page.x
page = nb.GetPage(1)
print "PanelY's Y value is %s" % page.y
if __name__ == "__main__":
app = wx.App()
MainFrame().Show()
app.MainLoop()
Run Code Online (Sandbox Code Playgroud)