问题描述
- Python-Tkinter请问有什么办法可以在事件处理过程中,即时刷新Text的信息?
-
新手刚学了Thinter,我用了for循环往文本框里添加信息,,用的insert方法,点击按钮后结果如下图所示,,表面上看不出控制台的结果跟Text组件的结果有啥区别,,但是事实上左边的Text的信息是4秒后才把添加的四条信息刷新出来的,,然而看到信息里面的用time方法打印出的时间戳确实方法已经处理过……
也就是说事件发生-循环语句中处理好但是要方法结束后,事件产生的组件信息才会刷新出来?def test(): for i in range(1,5): i=i*1.0 print(time.time()) t4.insert(i,'hello--'+str(time.time())+'n') if i==4: break time.sleep(1) print(time.time()) b2=Button(frm_l,width=10,command=test)
那请问有什么办法可以在事件处理过程中,即时刷新Text的信息?
补充一下,其实搞这个Text信息,,就是为了使用时候可以看到程序的一些运行情况。。我是想把方法的运行情况的返回值(把原本打印到控制台的提示信息变成方法的返回值)都直接显示到Text文本框里面,这是比较直观的方法。
然而事实上现在却卡在这里。或者换个思路,,有什么办法让别人(没有安装python环境)使用打包后的exe程序的时候看到控制台里面的信息。。
解决方案
一般的处理方法是在 for 中增加一点延时,再发消息让界面刷新。
解决方案二:
这应该是python GIL的原因,被锁住了,所以要等事件结束,才能刷新。
可以在你的代码中添加time.sleep(1),让出锁给界面刷新。
解决方案三:
晕,原来是这么简单的问题,,难怪没人回答了,,Text组件用insert添加内容之后,再用update方法就可以即时把内容刷新刷新出来了
时间: 2024-08-04 03:44:24