私の限界は私の最悪の敵ですが、最も良い学習バディです。私はWorkerThread
内からstartStop
を呼び出す方法を見つけたい別のクラスからクラス関数を呼び出す
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()"
:
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
そして:
私は2つのクラスがあります。私は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"
を取得し、私は 'に' defのstartStop'を渡すことができますWorkerThread(スレッド) '?上記の 'WorkerThread'を開始するイベントを追加して、それが明快に役立つかどうかを確認しました。 – chow
あなたは私が知る必要があったことを思い出しました。私は '__init__'宣言に' func'を追加し、グローバルを追加しました。 :)上記のコードを更新しました。 – chow
これを属性にすると、グローバルは必要ありません。 'self.function'と' self.function() 'です。また、 'run'の最後に' return'は不要です。 'return None'を避けるために2つの条件をマージすることができます。 「労働者であり自己ではない」トキル – Pythonista