wxPython 使用变量来引用一个对象

wxPython using variable to reference an object

我正在尝试将一个对象的名称传递给一个函数,以便我可以在函数内对其进行操作。我有大约 14 个单选按钮,我想根据单击的内容进行更改。使用该函数可以减少代码重用。 但是对象试图使用变量的名称作为对象名称,而不是其中包含的字符串。

与字符串本身相比,是否可以使用此字符串来引用对象名称?

    self.myObject.GetValue():
    self.writeLine('hello','myObject')

    self.myObject2.GetValue():
    self.writeLine('test','myObject2')

    def writeLine(self,str, objName):
        print str
        self.objName.Enable(False)
        self.objName.SetValue(False)


   self.objName.Enable(False)
AttributeError: 'myProg' object has no attribute 'objName'

忽略已发布代码中的明显错误,因为您无法 运行 它,如果您的实际代码如所述,您可以传递 object 而不是 string.
然后在函数中使用 object passed not self.objName 不存在!

这里有一段完全没有意义的代码来演示:

import wx

class ButtonFrame(wx.Frame):
    def __init__(self, value):
        wx.Frame.__init__(self,None)
        self.btn1 = wx.Button(self, -1, ("Button A"))
        self.btn2 = wx.Button(self, -1, ("Button B"))
        self.btnSizer = wx.BoxSizer(wx.HORIZONTAL)
        self.btnSizer.Add(self.btn1 , 0, wx.RIGHT, 10)
        self.btnSizer.Add(self.btn2 , 0, wx.RIGHT, 10)
        self.btn1.Bind(wx.EVT_BUTTON, self.OnPressA)
        self.btn2.Bind(wx.EVT_BUTTON, self.OnPressB)
        self.SetSizer(self.btnSizer)
        self.Centre()
        self.Show()
        

        self.btn1.Enable(False)
        
        mystr = self.btn1.GetLabel()
        self.writeLine(mystr,self.btn1)
    
        self.writeLine('test',self.btn2)
    
    def writeLine(self,str, objName):
        print(str)
        x = objName.IsEnabled()
        objName.Enable(not x)

    def OnPressA(self,evt):
        self.btn1.SetLabel('Button C')
        self.Layout()

    def OnPressB(self,evt):
        self.btn2.SetLabel('Button D')
        self.Layout()

if __name__ == "__main__":
    app = wx.App(False)
    ButtonFrame(None)
    app.MainLoop()

最初,如您所见,按钮 A 被禁用,按钮 B 被启用。
结果应该是:
按钮 A 是 Enabled
按钮 B 是 Disabled
在命令行上打印应该是 Button A 后跟 test