Python tkinter多处理根窗口在倒计时时无响应

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)

目前,我正在进行我的课程工作项目,我想实现一个简单的功能。该程序主要是在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()
上面的代码应该可以立即使用

如果有任何相关想法,请回复


非常感谢。

您可以将
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,忘记函数)
@布莱亚诺克利