祁映 发表于 2021-6-16 09:51:50

怎样使图形图像界面文本框Text内容按一定时间后刷新内容

1445from tkinter import*
from tkinter.ttk import*
import time

ck=Tk()
ck.title("测试")
ck.geometry("500x300")

e=Text(ck)
e.pack()
a=5
c=[]
b=
for i in c:
        c.append(i)

def q():
        time.sleep(3)
        e.delete(0.0,END)
        for i in b:
                e.insert(END,i)
                e.insert(END,'\n')

while a>0:
        b.pop()
        q()
        time.sleep(3)
        a=a-1
        print(b)

ck.mainloop()85



我想让文本框隔3秒后输出新的b列表。使用print函数能隔3秒后输出新的b列表,但是文本框界面是在print函数输出后才出现,而且文本框只有最后的b列表。请问该怎么改代码才能达到想要的效果?

wp231957 发表于 2021-6-16 16:06:45

tkinter是单线程的要实现这个估计有些 难度

hrpzcf 发表于 2021-6-16 16:30:44

使用tk的after方法

阿奇_o 发表于 2021-6-16 17:58:47

直接给条鱼你吧,{:10_333:}
from tkinter import *

win = Tk()

def update(ls):
    print(ls)
    txt.delete("1.0", END)
    txt.insert(END, ','.join(map(str, ls))+'\n')
    cancel_id = txt.after(1000, update, ls)
    if len(ls)>5:
      ls.pop()
    else:
      txt.after_cancel(cancel_id)
   
txt = Text(win)
txt.insert(END, "Hello\n")
txt.pack()

ls = list(range(9))
win.after(1000, update, ls)

win.mainloop()

Minecraft程序猿 发表于 2021-6-16 18:03:15

我之前玩过,使用threading创建线程,要在主事件循环之前,
from threading import Thread
...
def add():
    ...
t = Thread(target = add)
t.start()
...
mainloop()

祁映 发表于 2021-6-16 18:36:10

hrpzcf 发表于 2021-6-16 16:30
使用tk的after方法

from tkinter import*
from tkinter.ttk import*
import time

ck=Tk()
ck.title("测试")
ck.geometry("500x300")

e=Text(ck)
e.pack()
b=
def q():
        e.delete(0.0,END)
        for i in b:
                e.insert(END,str(i)+'\n')
        if b!=[]:
                b.pop()
        ck.after(3000,q)


ck.after(3000,q)
ck.mainloop()
我改成这样后可以了
谢谢!!!{:5_108:}{:5_110:}

祁映 发表于 2021-6-16 18:41:51

阿奇_o 发表于 2021-6-16 17:58
直接给条鱼你吧,

谢谢!!!这个也可以{:5_95:}
页: [1]
查看完整版本: 怎样使图形图像界面文本框Text内容按一定时间后刷新内容