Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 2.7 如何访问列表对象的属性?_Python 2.7_Wxpython - Fatal编程技术网

Python 2.7 如何访问列表对象的属性?

Python 2.7 如何访问列表对象的属性?,python-2.7,wxpython,Python 2.7,Wxpython,如何访问self.checkboxlist对象的属性?我听到一个错误说 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.fi

如何访问
self.checkbox
list对象的属性?我听到一个错误说

        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)
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)

是否确实不希望按如下方式定义故障OnDefault:

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'
self.checkbox
是一个普通的Python列表,它的元素有一个
Value
属性。 编程的方式是self.checkbox2的值控制两个字段

我看不出在哪里定义了
self.field
,但如果是

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.field = [self.field1, self.field2]

因此,第一个复选框控制第一个字段,第二个复选框控制第二个字段。

虽然使用了下面的代码,但我发现很难访问列表对象的属性。下面是我的代码

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)
但是,我必须检查面板中包含的所有复选框

        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)
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)

我用错误回溯尝试了您的代码(上次调用):文件“D:\PROJECT\mypro.py”,第148行,OnDefault self.field.Enable(False)AttributeError:“list”对象没有属性“Enable”对不起,我的错误。我编辑了这篇文章,并从self.field.Enable(..)cool.中删除了
self.
。这对我很有用。它帮助我减少了代码。感谢@Anthon分享你的知识。