我有一个问题,我想在ThreadedTask类中调用random_task()
函数,并且不确定如何执行此操作。我正在使用Python 2.7,如果这有所作为。我也希望能够在某种循环中运行它,这种循环会重复,直到应用程序关闭,但我会在另一个问题中提出这个问题。
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()
答案 0 :(得分:1)
您需要做的就是像这样延长ThreadedTask
:
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()
但是,在您提供的代码中,永远不会调用process()
。这样做也会从random_task()
类调用ThreadedTask
。
顺便说一句,这可以在需要时应用于Python中的几乎每个类。
希望这有帮助!