python中,怎么更新labelz中的文本
程序如下:fromTkinterimport*importtimewindow=Tk()label=Label(window,text="1")label.pack()t...
程序如下:
from Tkinter import *
import time
window = Tk()
label = Label(window,text="1")
label.pack()
time.sleep(2)
label.config(text="2")
window.mainloop()
想要先显示1,过两秒再显示2,但是打开.py,要等两秒才能打开,而且直接显示2 展开
from Tkinter import *
import time
window = Tk()
label = Label(window,text="1")
label.pack()
time.sleep(2)
label.config(text="2")
window.mainloop()
想要先显示1,过两秒再显示2,但是打开.py,要等两秒才能打开,而且直接显示2 展开
展开全部
#-*- coding: utf-8 -*-
'''
按照我个人的理解:
你的time.sleep调用在了mainloop之前,就是在显示label之前delay就已经完成了,同样config也完成了,所以直接显示了text=2的结果。
但是即使是在label弹出显示之后调用sleep函数(我也试过了),还有一个问题,就是sleep是阻塞式执行的,sleep完之前用户进行不了任何操作,UI也无法更新,必须要等到sleep做完了才能发生。
所以我另外开了一个线程,用于延迟,延迟完成之后通过回调函数通知UI进行更新。
废话不多了,下面是代码,我用的时python 2.7.8。
如果有说的不对的地方,请高手指点。
'''
from Tkinter import *
import time
import threading
#计时线程 用于延时
class MyThread(threading.Thread):
# sleeptime为需要延迟的时间
# callback为延迟结束后触发的回调函数
def __init__(self,id,sleeptime,callback):
threading.Thread.__init__(self)
self.id=id
self.callback = callback
self.sleeptime = sleeptime
# 重写线程run函数
def run(self):
time.sleep(self.sleeptime)
# 延时完成后传入回调函数
self.callback()
class Example(Frame):
def __init__(self, parent):
Frame.__init__(self, parent)
self.parent = parent
self.label = None
self.initUI()
#初始化窗体
def initUI(self):
self.label = Label(self, text='1')
self.label.bind('<Visibility>',self.onVis)
self.label.pack()
self.parent.title("Label")
self.pack()
#在label显示后进行调用
def onVis(self,*args):
print "Label Visible!"
# 创建一个新的线程用于延迟,并且传入changeText作为回调函数
t = MyThread(001,2,self.changeText)
t.start()
#在延迟完成后进行调用,与Mythread的callback绑定
def changeText(self):
self.label.config(text = '10')
window = Tk()
app = Example(window)
window.mainloop()
展开全部
#-*- coding: utf-8 -*-
你的time.sleep调用在了mainloop之前,就是在显示label之前delay就已经完成了,同样config也完成了,所以直接显示了text=2的结果。
但是即使是在label弹出显示之后调用sleep函数(我也试过了),还有一个问题,就是sleep是阻塞式执行的,sleep完之前用户进行不了任何操作,UI也无法更新,必须要等到sleep做完了才能发生。
所以我另外开了一个线程,用于延迟,延迟完成之后通过回调函数通知UI进行更新。
废话不多了,下面是代码(注意缩进!!),我用的时python 2.7。
from Tkinter import *
import time
import threading
#计时线程 用于延时
class MyThread(threading.Thread):
# sleeptime为需要延迟的时间
# callback为延迟结束后触发的回调函数
def __init__(self,id,sleeptime,callback):
threading.Thread.__init__(self)
self.id=id
self.callback = callback
self.sleeptime = sleeptime
# 重写线程run函数
def run(self):
time.sleep(self.sleeptime)
# 延时完成后传入回调函数
self.callback()
class Example(Frame):
def __init__(self, parent):
Frame.__init__(self, parent)
self.parent = parent
self.label = None
self.initUI()
#初始化窗体
def initUI(self):
self.label = Label(self, text='1')
self.label.bind('<Visibility>',self.onVis)
self.label.pack()
self.parent.title("Label")
self.pack()
#在label显示后进行调用
def onVis(self,*args):
print "Label Visible!"
# 创建一个新的线程用于延迟,并且传入changeText作为回调函数
t = MyThread(001,2,self.changeText)
t.start()
#在延迟完成后进行调用,与Mythread的callback绑定
def changeText(self):
self.label.config(text = '10')
window = Tk()
app = Example(window)
window.mainloop()
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询