大家好,
我目前正在使用 Python 和 wxPython 开发一个应用程序。 在其中我有一个对话框,其中填写了多个字段,以便在数据库中插入“文档”。 该对话框的布局基本上由一个 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)
<...>
如您所见,我为对话框本身提供了一个类(其定义由“注册”按钮控制),然后为笔记本的每个“选项卡”提供了不同的类。
现在,为了将数据提交到数据库,我必须能够访问“OnRegister”定义中的“tabs”变量(属于对话框的类)。但是,我还没有找到一种方法来做到这一点。
有人可以帮助我吗?我必须改变程序的结构吗?我这样做是因为这是我让笔记本工作的唯一方法......
提前谢谢
最佳答案
你的“选项卡”不是类变量,它们是函数__init__
内的局部变量。另外,您不需要类变量,您需要实例变量。要读取和写入实例变量,您需要将它们作为 self
的属性来访问,例如 self1.pag1
,而不是通过写入它们的名称。
您需要区分:
- 函数局部变量 - 您在函数内分配的变量
- 类变量 - 通过属性运算符访问的类属性(例如
NovoRegisto.variable_name
) - 实例变量 - 通过使用
self
上的属性运算符访问的实例属性(例如self.pag1
)。
您可能应该阅读更多有关如何 Python classes 的信息。应该使用。
作为补充说明,您最常希望使用
super(InfoOT, self).__init__(parent)
超过
wx.Panel.__init__(self, parent)
它在新式类中可用(即间接或直接从内置对象
继承的所有类)
关于python - 在另一个类中使用类变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4845834/