当前,我正在从事课程工作项目,并且有一个我想实现的简单功能。该程序主要在tkinter上,我希望标签显示3秒钟,隐藏7秒钟,持续一个周期,而在下一个周期中,标签中的文本应更改;标签更改时,我尝试从前3秒钟禁用输入框,然后对其进行标准化。
倒计时和标签文本更改都可以,但是对输入框进行标准化后根本不响应。
这是我的代码
def c_time():
from tkinter import *
import time
root=Tk()
en = Entry(root)
en.pack(side=TOP)
en.focus_force()
la = Label(root, text='6666')
la.pack(side=BOTTOM)
li = ['a', 'b','c','d']
for i in li:
la.config(text=i)
root.update()
def la_diappear():
root.after(3000)
la.pack_forget()
root.update()
def la_appear():
root.after(7000)
la.pack()
la_diappear()
la_appear()
root.mainloop()
c_time()
尝试了root.after和time.sleep方法
当我在python中获得有关GIL的信息时,我尝试了多处理:
from multiprocessing import Process
import time
from tkinter import *
def count_down():
global total
total = 5
for i in range(total):
time.sleep(1)
total -= 1
print(total)
def tkwindow():
root=Tk()
en = Entry(root)
en.pack(side=TOP)
en.focus_force()
la = Label(root, text='6666')
la.pack(side=BOTTOM)
li = ['a', 'b','c','d']
for i in li:
la.config(text=i)
root.update()
count_down()
if total == 3:
la.pack_forget()
root.update()
if total == 5:
la.pack()
root.mainloop()
if __name__ == "__main__":
a = Process(target=count_down)
b = Process(target=tkwindow)
b.start()
上面的代码应该立即可用。
请回复任何想法
非常感谢您。
答案 0 :(得分:0)
您可以将for
循环包装在一个函数中,并对该函数进行线程化。然后,您也可以使用time.sleep
而不阻塞主线程。
from tkinter import *
from threading import Thread
import time
root=Tk()
en = Entry(root)
en.pack(side=TOP)
en.focus_force()
la = Label(root, text='6666')
la.pack(side=BOTTOM)
def la_diappear():
la.pack_forget()
def la_appear():
la.pack()
def actions():
li = ['a', 'b','c','d']
for i in li:
la.config(text=i)
time.sleep(3)
la_diappear()
time.sleep(7)
la_appear()
t = Thread(target=actions)
t.start()
root.mainloop()