2017-01-03 4 views
0

Ich habe ein Problem, wo ich die random_task() Funktion in der ThreadedTask-Klasse aufrufen möchte und nicht sicher war, wie das geht. Ich benutze Python 2.7, wenn das einen Unterschied macht. Ich möchte auch in der Lage sein, es in einer Art Schleife zu laufen, die sich wiederholen würde, bis die Anwendung geschlossen ist, aber ich werde das in einer anderen Frage fragen.Tkinter Multiprocessing und Aufruf von Funktionen aus einer anderen Klasse

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() 

Antwort

1

Alles, was Sie tun müssen, ist ThreadedTask zu erweitern, wie so:

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") 

Und es dann wie so nennen (von der TestClass):

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

jedoch im Code Sie gaben process() wird nie aufgerufen. Dies wird auch random_task() aus der ThreadedTask Klasse anrufen.

Dies kann übrigens auf fast jede Klasse in Python bei Bedarf angewendet werden.

Hoffe, das hilft!

+0

Ja, das hat funktioniert, danke! – ConorYoungs

+0

@ConorYoungs Ich bin froh, dass ich helfen konnte! Dieser 'Tweak' ist in der Tat nicht auf den ersten Blick offensichtlich, aber es lohnt sich, daran zu denken! – linusg

Verwandte Themen