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
我正在尝试将一个对象的名称传递给一个函数,以便我可以在函数内对其进行操作。我有大约 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