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'
4

2 に答える 2

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 の値が両方のフィールドを制御することです。

どこで定義されているかわかりません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)

したがって、最初のチェックボックスは最初のフィールドを制御し、2 番目のチェックボックスは 2 番目のフィールドを制御します。

于 2013-03-12T23:14:25.270 に答える
0

以下のコードで動作しましたが、リストオブジェクトの属性にアクセスするのが難しいことがわかりました.hereが私のコードです。

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)

しかし、パネルに含まれるすべてのチェックボックスをチェックする必要があります。代わりに、リストオブジェクトを使用してみましたが、エラーが発生しました

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'
于 2013-03-13T10:57:57.893 に答える