По общему признанию, мне сложно ориентироваться в объекте. Поэтому я не совсем понимаю объявления self
повсюду. Тем не менее, у меня есть панель с несколькими типами виджетов.Как передать wxWidget в общую функцию?
Есть ли способ, чтобы общая функция получала виджет в качестве аргумента?
Я хотел бы функцию в нижней части, чтобы получить аргументы из self.Bind
, в частности, я могу передать self.sliderZone1
и self.tc_ZONEVOL1
в def
?
Я хотел бы, чтобы def slider1Update
выглядеть примерно так:
def sliderUpdate(self, event, slider, textctrl):
textctrl.SetValue(str(slider.GetValue())
возможно ли это?
псевдопользователей-код:
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()))
Я не совсем есть энергия, чтобы подать полный ответ, но проверить [этот ответ] (http://stackoverflow.com/questions/173687/is-it-possible-to-pass- arguments-to-event-bindings) для передачи аргументов в привязки событий. Вам понадобится лямбда-функция. – dpwilson