2011-01-30 57 views
2

問候每個人,在另一個類中使用類變量

我目前正在使用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」定義(屬於Dialog的類)中的「選項卡」變量。但是,我仍然沒有找到辦法做到這一點。

任何人都可以幫助我嗎?我必須改變我的程序結構嗎?我就是這麼做的,因爲它是我設法讓筆記本工作的唯一途徑...

預先感謝您

+1

「tabs」在哪裏? – delnan 2011-01-30 22:10:37

+0

@delnan,我認爲「標籤」只是意味着pag1,pag2等。 – jambox 2011-01-30 22:37:54

回答

3

你的「標籤」是不是類變量,它們在函數內部的局部變量__init__。你也不需要類變量,你想要實例變量。要讀取和寫入實例變量,您需要將它們作爲self的屬性(例如self1.pag1)訪問,而不是通過寫入它們的名稱。

你需要區分:

  • 函數的局部變量 - 您分配一個函數中
  • 類變量變量 - 類的屬性,你可以通過屬性操作(如NovoRegisto.variable_name
  • 訪問實例變量 - 您可以使用self上的屬性運算符(例如self.pag1)訪問的實例屬性。

您應該更多地瞭解如何使用Python classes

作爲附加的註釋,你最經常要使用

super(InfoOT, self).__init__(parent) 

wx.Panel.__init__(self, parent) 

它可在新的樣式類(即所有類,直接或間接地繼承內置的object

相關問題