向大家致意,
我目前正在使用Python和wxPython开发应用程序。 在其中我有一个Dialog,其中填充了几个字段,以便在数据库中插入“文档”。 该对话框的布局基本上由一个wx.Notebook组成,有几个“标签”,每个标签都包含某种字段。
# Dialog class
class NovoRegisto(wx.Dialog):
def __init__(self,parent):
wx.Dialog.__init__(self, parent, title='Registar Nova O.T.', size=(900,600))
painel = wx.ScrolledWindow(self, -1, style=wx.VSCROLL|wx.HSCROLL)
painel.SetScrollbars(0,30,0,500)
notebook = wx.Notebook(painel)
# create the page windows as children of the notebook
pag1 = InfoOT(notebook)
pag2 = Avaliacao(notebook)
pag3 = Componentes(notebook)
pag4 = Material(notebook)
pag5 = OTsRelacionadas(notebook)
<...>
# function to insert data in SQLite database
def OnRegister(self,event):
<...>
# first tab class
class InfoOT(wx.Panel):
def __init__(self, parent):
wx.Panel.__init__(self, parent)
<...>
正如你所看到的,我有一个Dialog本身的类(定义由“Register”按钮控制),然后是笔记本的每个“标签”的不同类。
现在,为了将数据提交到数据库,我必须能够访问“OnRegister”定义中的“tabs”变量(属于Dialog的类)。但是,我还没有找到办法做到这一点。
任何人都可以帮助我吗?我是否必须更改程序的结构?我是这样做的,因为这是我设法让笔记本工作的唯一方法......
提前谢谢
答案 0 :(得分:3)
您的“标签”不是类变量,它们是函数__init__
内的局部变量。你也不想要类变量,你想要实例变量。要读取和编写实例变量,您需要将其作为self
的属性进行访问,例如self1.pag1
,而不是通过编写其名称。
您需要区分:
NovoRegisto.variable_name
)self
上的属性运算符访问的实例属性(例如self.pag1
)。您应该阅读有关如何使用Python classes的更多信息。
作为补充说明,您通常希望使用
super(InfoOT, self).__init__(parent)
在
wx.Panel.__init__(self, parent)
在新式类中可用(即所有间接或直接从内置object
继承的类)