Zugegeben, ich habe eine harte Zeit mit objektorientierten Dingen. Also verstehe ich die self
Deklarationen nicht überall. Das heißt, ich habe ein Panel mit einer Anzahl der gleichen Arten von Widgets.Wie übergebe ich ein wxWidget an eine generische Funktion?
Gibt es eine Möglichkeit, eine generische Funktion ein Widget als Argument zu erhalten?
Ich mag die Funktion am unteren Argument aus den self.Bind
erhalten, und zwar kann ich passieren self.sliderZone1
und self.tc_ZONEVOL1
in die def
?
würde Ich mag die def slider1Update
so etwas wie folgt aussehen:
def sliderUpdate(self, event, slider, textctrl):
textctrl.SetValue(str(slider.GetValue())
Ist das möglich?
Psuedo-Code:
self.ck_ZONE1 = wx.CheckBox(self, -1, zoneNAME[0])
self.ck_ZONE1.SetToolTip(wx.ToolTip("Click here to monitor volume for this zone."))
self.tc_ZONEVOL1 = wx.TextCtrl(panel, -1, "", (0,0), (30,21))
self.tc_ZONEVOL1.SetToolTip(wx.ToolTip("Set max volume for the zone (0-100)"))
self.sliderZone1 = wx.Slider(self, -1, 50, 0, 100, size=(400,10), style=wx.SL_HORIZONTAL)
self.Bind(wx.EVT_SLIDER, self.slider1Update)
sizer.Add(self.ck_ZONE1, pos=(xIndex,0), flag=wx.EXPAND|wx.LEFT|wx.ALIGN_CENTER_VERTICAL, border=10)
sizer.Add(self.sliderZone1, pos=(xIndex,1), flag=wx.EXPAND|wx.LEFT|wx.ALIGN_CENTER_VERTICAL, border=10)
sizer.Add(self.tc_ZONEVOL1, pos=(xIndex,2), flag=wx.RIGHT|wx.ALIGN_CENTER_VERTICAL, border=10).SetMinSize((30,22))
# Read in config
if self.ck_ZONE1.Label == "":
self.ck_ZONE1.Label = zoneNAME[0]
if self.tc_ZONEVOL1.Value == "":
self.tc_ZONEVOL1.SetValue(str(self.sliderZone1.GetValue()))
xIndex +=1
pub.subscribe(self.setVolumePanel, 'setVolumePanel')
sizer.AddGrowableCol(1)
panel.SetSizer(sizer)
def slider1Update(self, event):
self.tc_ZONEVOL1.SetValue(str(self.sliderZone1.GetValue()))
Ich habe nicht ganz die Energie, um eine vollständige Antwort zu schreiben, aber überprüfe [diese Antwort] (http://stackoverflow.com/questions/173687/is-it-possible-to-pass- Argumente-in-Event-Bindungen) für die Übergabe von Argumenten an Ereignisbindungen. Du wirst eine Lambda-Funktion brauchen. – dpwilson