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
展开
 我来答
PsyCracker
推荐于2018-03-05 · TA获得超过120个赞
知道答主
回答量:19
采纳率:0%
帮助的人:20.3万
展开全部
#-*- 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()
严显敏
推荐于2016-07-18 · TA获得超过269个赞
知道答主
回答量:132
采纳率:50%
帮助的人:35.9万
展开全部
#-*- 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()
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式