Мои ограничения - мой злейший враг, но самый лучший обучающий приятель.Вызов функции класса из другого класса
У меня есть два класса:
class WorkerThread(Thread):
"""Worker Thread Class."""
def __init__(self, notify_window):
"""Init Worker Thread Class."""
Thread.__init__(self)
self._notify_window = notify_window
self.ToKill = False
self._want_abort = 0
self.start()
def run(self):
"""Run Worker Thread."""
while worker==True:
# somehow get to volumePanel.startStop()
if self.ToKill == True:
return None
proc.wait()
wx.PostEvent(self._notify_window, ResultEvent(None))
return
А:
class VolumePanel(wx.Panel):
#<...snip...>
def launchVolClick(self, event):
if self.bt_Launch.Label == "Enable Monitor":
self.worker = WorkerThread(self)
self.bt_Launch.Label = "Disable Monitor"
else:
self.worker.ToKill = True
self.bt_Launch.Label = "Enable Monitor"
def startStop(self):
print "in def startStop()"
Я хочу найти способ вызвать startStop
внутри WorkerThread
. Я пробовал this и не мог заставить его работать.
EDIT: Заключительный рабочий код ниже
class WorkerThread(Thread):
"""Worker Thread Class."""
def __init__(self, notify_window, func):
"""Init Worker Thread Class."""
Thread.__init__(self)
self._notify_window = notify_window
self.ToKill = False
self._want_abort = 0
global function
function = func
self.start()
def run(self):
"""Run Worker Thread."""
while worker==True:
# somehow get to volumePanel.startStop()
function()
if self.ToKill == True:
return None
proc.wait()
wx.PostEvent(self._notify_window, ResultEvent(None))
return
def launchVolClick(self, event):
if self.bt_Launch.Label == "Enable Volume Monitor":
self.worker = WorkerThread(self, self.startStop)
self.bt_Launch.Label = "Disable Volume Monitor"
else:
self.worker.ToKill = True
self.bt_Launch.Label = "Enable Volume Monitor"
Я могу передать определение функции startStop' для ' WorkerThread (Thread) '? Я добавил событие, которое запускает «WorkerThread» выше, чтобы узнать, помогает ли это с ясностью. – chow
Вы вызвали то, что мне нужно было знать - я добавил 'func' в' __init__' объявление и добавил глобальный, и это сработало. :) Обновленный, рабочий код, выше. – chow
Если вы сделаете это атрибутом, вам не нужен глобальный. 'self.function' и' self.function() '. Кроме того, 'return' не нужно в конце' run'. Вы можете объединить два условия, чтобы избежать «возврата None». 'в то время как рабочий и не self.ToKill' – Pythonista