我用python2.7写了一个基于tkinter的小程序,代码中打印了程序的过程记录(比如"步骤1正在处理中……"、"步骤1处理完成"),如何在运行过程中,将这些过程记录显示在弹出的子窗口中(类似安装程序时,在弹出窗口中实时显示出安装的进度信息)?不知道是否用到线程?
使用tkinter的文本框Text即可,打印信息实时写入文本框中即可,简单想文本写入内容不需要线程
一下是文本框对象的删除,添加,更新使用:
你好,谢谢,我用的标签控件,主窗口点击“开始”按钮,弹出的窗口中,没有出现“正在处理……”的提示,不知道是什么问题?
#coding:utf-8
import time
import threading
from tkinter import *
reload(sys)
sys.setdefaultencoding('utf-8')
sys.setrecursionlimit(100000)
def displayprocess(bs):
def displaylabelprocess():
list = ["正在处理...", "正在处理......", "正在处理........."]
for j in range(1, 10):
for txt in list:
x.set(txt)
time.sleep(1)
rt2.update()
def displaylabelprocesswc():
x.set("完成!")
time.sleep(1)
rt2.update()
rt2 = Tk()
rt2.title('进度')
rt2.minsize(500, 200) # 最小尺寸
rt2.maxsize(500, 200) # 最大尺寸
x = StringVar()
x.set('正在处理...')
label1 = Label(rt2, text="数据备份:")
label1.pack()
label1.place(x=30, y=30)
labelprocess1 = Label(rt2, textvariable=x)
labelprocess1.pack()
labelprocess1.place(x=100, y=30)
if bs == 1:
displaylabelprocess()
if bs == 2:
displaylabelprocesswc()
rt2.mainloop()
def thread_it(func, *args):
'''将函数打包进线程'''
# 创建
t = threading.Thread(target=func, args=args)
# 守护 !!!
t.setDaemon(True)
# 启动
t.start()
root = Tk()
root.title('备份')
root.minsize(500, 200) # 最小尺寸
root.maxsize(500, 200) # 最大尺寸
root.resizable(False, False) ## 规定窗口不可缩放
button2 = Button(root, text='开始', width=8, command=lambda: thread_it(displayprocess(1)))
button3 = Button(root, text='完成', width=8, command=lambda: thread_it(displayprocess(2)))
button2.pack()
button3.pack()
button2.place(x=160, y=60)
button3.place(x=250, y=60)
root.update()
root.mainloop()