是否有人知道如何将def形式称为线程。
时钟节目:
import sys
from tkinter import *
from tkinter import messagebox
from tkinter import filedialog
from time import sleep
import threading
class MyThread ( threading.Thread ):
def mclock(): # function that it can't call
x = 1
z = 0
while x != -1:
Label(mGui,text = str(x) + "second(s)").pack()
x = x+1
sleep(1)
if x == 60:
x = 1
z = z+1
Label(mGui, text= str(z) + " minute(s) has past.").pack()
return
return
MyThread().start()
mGui = Tk()
mGui.geometry("300x200+100+100")
mGui.title("Jono's Clock")
menubar = Menu(mGui)
filemenu = Menu(menubar, tearoff = 0)
filemenu.add_command(label = "Clock",command = mclock) # can't use function
menubar.add_cascade(label = "File",menu = filemenu)
mGui.config(menu = menubar)
mGui.mainloop()
如果有人发现任何其他错误,请说明。我也在使用Windows 7和python 3.3。
答案 0 :(得分:1)
您发布的代码中存在多个语法错误,我不确定您对它们的确切意图,因此这里概述了如何从线程运行内容。
如果您希望线程从自定义线程类运行您自己的代码,通常的方法是将代码放在名为run
的方法中,该方法将在线程启动时自动执行:
import threading
class MyThread(threading.Thread):
def run(self):
# do your stuff here
print("Hello World")
MyThread().start()
或者,如果您不需要类,可以在模块的顶层创建函数,并将其作为参数传递给threading.Thread
的构造函数:
def my_function():
print("Hello World")
threading.Thread(target=my_function).start()
请注意,您经常希望保留对线程对象的引用,而不是像上面的代码那样让它继续。这需要您使用两行来创建然后启动线程:
thread = MyThread() # or the alternative version
thread.start()
这可以让你以后做:
thread.join()
确保线程完成其工作。