wxPython 使用变量来引用对象

问题描述

我试图将一个对象的名称传递给一个函数,以便我可以在一个函数内操作它。我有大约 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 传递的 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,("Button B"))
        self.btnSizer = wx.BoxSizer(wx.HORIZONTAL)
        self.btnSizer.Add(self.btn1,wx.RIGHT,10)
        self.btnSizer.Add(self.btn2,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