我正在制作一个gui,代码如下。当我点击gui中的复制按钮时,它会被冻结,直到执行过程,但我想同时做其他过程。我对Google进行了一些研究,我知道如果我在后台运行该过程然后这个问题得到了解决。那么请有人告诉我最简单的方法吗?
代码:
import Tkinter as tk
import time
root = tk.Tk()
root.geometry('300x400')
def Number():
for i in range(100):
print(i)
time.sleep(1)
def hello():
print('Hello')
b = tk.Button(root,text='copy',command = Number)
b.pack()
b = tk.Button(root,text='display',command = hello)
b.pack()
root.mainloop()
预期输出
当我点击复制按钮时,函数Number
应该在后台运行而Gui不应该被冻结,同时如果我点击display
按钮它应该显示Hello
答案 0 :(得分:3)
你必须在一个帖子中启动你的号码引用功能。
这是一个非常非常粗略的例子,它对启动的函数何时完成一无所知,允许你同时启动多个计数...如果你想要正确地执行它,你可能想要读入线程。
import Tkinter as tk
import time
import threading
root = tk.Tk()
root.geometry('300x400')
def print_numbers(end): # no capitals for functions in python
for i in range(end):
print(i)
time.sleep(1)
def print_hello():
print('Hello')
def background(func, args):
th = threading.Thread(target=func, args=args)
th.start()
b1 = tk.Button(root,text='copy',command = lambda : background(print_numbers, (50,))) #args must be a tuple even if it is only one
b1.pack() # I would advice grid instead for Tk
b2 = tk.Button(root,text='display',command = print_hello)
b2.pack()
root.mainloop()