Python tkinter多处理根窗口在倒计时时无响应
目前,我正在进行我的课程工作项目,我想实现一个简单的功能。该程序主要是在tkinter上,我希望标签显示3秒,隐藏7秒一个时段,在下一个时段标签中的文本应该改变;当标签更改时,我尝试从前3秒开始禁用一个输入框,然后将其正常化 倒计时和标签文本的更改是正常的,但输入框在正常化时根本没有响应 这是我的密码Python tkinter多处理根窗口在倒计时时无响应,python,tkinter,multiprocessing,Python,Tkinter,Multiprocessing,目前,我正在进行我的课程工作项目,我想实现一个简单的功能。该程序主要是在tkinter上,我希望标签显示3秒,隐藏7秒一个时段,在下一个时段标签中的文本应该改变;当标签更改时,我尝试从前3秒开始禁用一个输入框,然后将其正常化 倒计时和标签文本的更改是正常的,但输入框在正常化时根本没有响应 这是我的密码 def c_time(): from tkinter import * import time root=Tk() en = Entry(root)
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()
上面的代码应该可以立即使用
如果有任何相关想法,请回复
非常感谢。您可以将
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()
“同时尝试了root.after和time.sleep方法”
root.after
和time.sleep
——它暂停整个应用程序,并且几乎不应该像GUI的其余部分一样在同一线程和进程中完成。如果在root.after()中传递函数,我应该把la.pack\u忘记()
`root.update()`在函数中,然后执行root.after(3000,忘记函数)
@布莱亚诺克利