2013-02-21 28 views
0
 panel=wx.Panel(self) 
     panel.SetBackgroundColour(wx.WHITE) 
     font = wx.Font(8, wx.DEFAULT, wx.NORMAL, wx.BOLD) 
     self.field1 = wx.TextCtrl(panel,pos=(120,25),size=(170,20)) 
     self.field2 = wx.TextCtrl(panel,pos=(120,90),size=(170,20)) 
     self.field=[self.field1,self.field2] 
     field1_lbl=wx.StaticText(panel,-1, label='path1:', pos=(25, 25)) 
     field1_lbl.SetFont(font) 
     field2_lbl=wx.StaticText(panel,-1, label='path2:', pos=(25,90)) 
     field2_lbl.SetFont(font) 
     self.checkbox1=wx.CheckBox(panel, -1,'Default',pos=(240,45),size=(50,25)) 
     self.checkbox1.SetValue(False) 
     self.checkbox1.Bind(wx.EVT_CHECKBOX,self.OnDefault) 

     self.checkbox2=wx.CheckBox(panel, -1,'Default',pos=(240,110),size=(50,25)) 
     self.checkbox2.SetValue(False) 
     self.checkbox2.Bind(wx.EVT_CHECKBOX,self.OnDefault) 
     self.checkbox=[self.checkbox1,self.checkbox2] 
    def OnDefault(self,event): 
     for checkbox in self.checkbox: 
      for field in self.field: 
       if self.checkbox.Value==False: 
        self.field.Enable(True) 
       else: 
        self.field.Enable(False) 

如何訪問self.checkbox列表對象的屬性?我得到一個錯誤說如何訪問列表對象的屬性?

Traceback (most recent call last): 
    File "D:\PROJECT\mypro.py", line 251, in OnDefault 
    if self.checkbox.Value==False: 
AttributeError: 'list' object has no attribute 'Value' 

回答

1

你確定你不想定義OnDefault如下:

def OnDefault(self,event): 
    for checkbox in self.checkbox: 
     for field in self.field: 
      if checkbox.Value==False: 
       self.field.Enable(True) 
      else: 
       self.field.Enable(False) 

self.checkbox是正常的Python列表,它的元素有一個Value屬性。 這種編程方式是self.checkbox2的Value控制兩個字段。

我沒有看到self.field定義,但如果這是

self.field = [self.field1, self.field2] 

那麼你可能想OnDefault是這樣的:

def OnDefault(self,event): 
    for idx, checkbox in enumerate(self.checkbox): 
     field = self.field[idx]: 
     if checkbox.Value==False: 
      field.Enable(True) 
     else: 
      field.Enable(False) 

所以第一個複選框控制第一場第二個複選框是第二個字段。

+0

我試圖用一個錯誤回溯你的代碼(最最近調用最後): 文件「D:\ PROJECT \ mypro.py」,行148,OnDefault self.field.Enable(False) AttributeError:'list'對象沒有屬性'Enable' – Aramanethota 2013-03-13 09:59:53

+0

對不起,我的壞。我編輯了這篇文章,並從self.field.Enable(..) – Anthon 2013-03-13 11:59:46

+0

中刪除了'self.'。它爲我工作,它幫助我減少了代碼。感謝@Anthon分享你的知識。 – Aramanethota 2013-03-14 08:51:18

0

儘管它與下面的代碼一起工作,但我發現很難訪問列表對象的屬性。這是我的代碼。

def OnDefault(self,event): 
    if self.checkbox1.Value==False: 
     self.field1.Enable(True) 
    else: 
     self.field1.Enable(False) 


    if self.checkbox2.Value==False: 
     self.field2.Enable(True) 
    else: 
     self.field2.Enable(False) 

,但是,我要檢查中包含的所有panel.Instead複選框,我嘗試使用列表對象而導致的錯誤說

Traceback (most recent call last): 
File "D:\PROJECT\mypro.py", line 149, in OnDefault 
    self.field.Enable(False) 
AttributeError: 'list' object has no attribute 'Enable'