Meine Einschränkungen sind mein schlimmster Feind, aber bestest Lernpartner.Aufruf einer Klassenfunktion von einer anderen Klasse
Ich habe zwei Klassen:
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
Und:
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()"
ich startStop
von rufen im WorkerThread
einen Weg finden wollen. Ich habe versucht this und konnte es auch nicht funktionieren.
EDIT: Abschlussarbeits Code unter
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"
Ich kann die 'def startStop' passieren zu' WorkerThread (Thema) '? Ich fügte das Ereignis hinzu, das den "WorkerThread" oben startet, um zu sehen, ob das mit Klarheit hilft. – chow
Sie lösten das, was ich wissen musste - ich fügte der '__init__' Deklaration' func' hinzu und fügte ein globales hinzu und es funktionierte. :) Aktualisiert, funktionierender Code, oben. – chow
Wenn Sie es zu einem Attribut machen, brauchen Sie das Globale nicht. 'self.function' und' self.function() '. Auch 'return' ist am Ende von' run' unnötig. Sie können Ihre beiden Bedingungen zusammenführen, um das 'return None' zu vermeiden. 'während Arbeiter und nicht selbst. ToKill' – Pythonista