2017-01-03 16 views
0

ThreadedTaskクラスのrandom_task()関数を呼びたいと思っていましたが、これをどうやって行うのかがわかりませんでした。私はPython 2.7を使用しています。私はまた、アプリケーションが閉じられるまで繰り返す何らかのループの中で実行できるようにしたいと思いますが、別の質問でそれを尋ねます。別のクラスのTkinterマルチプロセッシング関数と呼び出し関数

class ThreadedTask(threading.Thread): 
    def __init__(self, parent, queue): 
     threading.Thread.__init__(self) 
     self.parent = parent 
     self.queue = queue 

    def run(self): 
     self.parent.random_task() 
     time.sleep(5) 
     self.queue.put("Task finished") 

をそして(TestClassから)ので、同じようにそれを呼び出す:コードに

ThreadedTask(self, self.queue).start() 

しかし、

import Tkinter as tk 
import os, Queue, threading, time 

class TestClass(tk.Tk): 
    def __init__(self, *args, **kwargs): 
     tk.Tk.__init__(self, *args, **kwargs) 
     self.create_view() 

    def create_view(self): 
     self.labelTitle = tk.Label(self, text="page",) 
     self.labelTitle.pack() 

    def random_task(self): 
     print("test") 

    def process(self): 
     self.queue = Queue.Queue() 
     ThreadedTask(self.queue).start() 
     self.master.after(100, self.process_queue) 

    def process_queue(self): 
     try: 
      msg = self.queue.get(0) 
     except Queue.Empty: 
      self.master.after(100, self.process_queue) 

class ThreadedTask(threading.Thread): 
    def __init__(self, queue): 
     threading.Thread.__init__(self) 
     self.queue = queue 

    def run(self): 
     #I want to run random_task() here 
     time.sleep(5) 
     self.queue.put("Task finished") 

app = TestClass() 
app.geometry("800x600") 
app.mainloop() 

答えて

1

すべてを行う必要があるので、同じようThreadedTaskを拡張することですあなたが与えた、process()は決して呼び出されません。そうすると、ThreadedTaskクラスのrandom_task()も呼び出されます。

これは、必要に応じて、Pythonのほぼすべてのクラスに適用できます。

希望すると便利です。

+0

はい、これはうまくいきました、ありがとうございます! – ConorYoungs

+0

@ConorYoungsうれしい!この「調整」は当初は明らかではありませんが、留意する価値があります! – linusg

関連する問題