Python 在不中断循环的情况下休眠,以便在tkinter中写入新条目
此UI中有2个按钮和1个输入框。名为“开始循环”和“打印”的按钮 当我在输入框中写入文本时,按下相关按钮时,我应该能够看到它的打印输出。我想做的是,把按钮按成一个循环。但有趣的是每10秒钟打印一个新条目 当您输入一个条目并按下“开始循环”按钮时,它将变为运行。同时,用户界面窗口将冻结。无法写入新条目或按“打印”按钮。即使我使用时间。睡眠功能它仍然冻结。它打印旧条目,但我想在每次迭代时编写一个新条目。查看代码:Python 在不中断循环的情况下休眠,以便在tkinter中写入新条目,python,tkinter,while-loop,Python,Tkinter,While Loop,此UI中有2个按钮和1个输入框。名为“开始循环”和“打印”的按钮 当我在输入框中写入文本时,按下相关按钮时,我应该能够看到它的打印输出。我想做的是,把按钮按成一个循环。但有趣的是每10秒钟打印一个新条目 当您输入一个条目并按下“开始循环”按钮时,它将变为运行。同时,用户界面窗口将冻结。无法写入新条目或按“打印”按钮。即使我使用时间。睡眠功能它仍然冻结。它打印旧条目,但我想在每次迭代时编写一个新条目。查看代码: import time from tkinter import * class tk
import time
from tkinter import *
class tkin(Frame):
def __init__(self,parent):
Frame.__init__(self, parent)
self.parent = parent
self.UI()
def UI(self):
self.down = StringVar()
self.down_entry = Entry(self, textvariable=self.down)
self.down_entry.grid(row=2, column=0)
self.start_loop_buuton = Button(text="Start Loop", command=self.loop_func)
self.start_loop_buuton.place(x=10,y=40)
self.print_func_button = Button(text="Print ", command=self.pprint)
self.print_func_button.place(x=120,y=40)
self.pack()
def loop_func(self):
start = time.time()
while True:
print("standart print out")
end = time.time()
if (end- start) >10:
time.sleep(10)
self.print_func_button.invoke() ## press print_func_button
start = time.time()
def pprint(self):
print("WHICH PRINT LINE I WANT TO PRINT IN LIKE EVERY 10 SECONDS")
print(self.down.get())
def main():
root = Tk()
tkin(root)
root.geometry("195x100+300+300")
root.mainloop()
main()
任何建议都很好。提前感谢。这就是我将如何重新定义您的方法:
def循环函数(self):
self.print_func_按钮。invoke()#按print_func_按钮
self.after(3000,self.loop_func)
时间是以毫秒为单位的,因此这将是3秒。在本例中,我刚刚使用按钮函数的命令参数中的线程分离了循环“loop_func()”。就像这样:
import threading
...
...
...
self.start_loop_buuton = Button(text="Start Loop", command=threading.Thread(target=self.loop_func).start())
因此,这两个循环是分开的。你必须将它放在一个单独的线程中,否则你会干扰tkinter的主循环,或者你可以使用
after()
method也time。sleep()
冻结整个脚本,正如@Matiiss所说的。这将在按下按钮之前执行该功能。