python中的tkiner,可以输出日志,动态滚动日志

需求

python中,使用tkiner写了个可以把print的输出重定向到tk的日志框中,可以使用自定义函数,输出日志,可以定义按钮功能和退出等功能

实现

代码如下:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# Date:2023-12-13 v1.0


import sys
import time
import tkinter as tk
from tkinter import scrolledtext  # 导入滚动文本框的模块


# 生成主窗口,命名 window
root = tk.Tk()
# 定义主窗口标题
root.title('xxx程序')
# 定义主窗口的长宽,窗体距离屏幕上下的距离
root.geometry('800x500+100+60')


# 定义日志输出到tkiner类
class StdoutRedirector(object):
    def __init__(self, text_widget):
        self.text_widget = text_widget

    def write(self, str):
        self.text_widget.insert(tk.END, str)  # 在text末尾追加文字
        self.text_widget.see(tk.END)  # 光标一直追加到文件末尾
        self.text_widget.update()  # 一直更新输出

    def flush(self):
        pass


# 控制台输出函数,输出到t1
def ternimal_print(msg):
    DATE_TIME = time.strftime('[%Y-%m-%d %H:%M:%S]')
    t1.insert('end', f'{DATE_TIME}  {msg}\n')  # 向text文本框末尾追加文字
    t1.see(tk.END)  # 光标一直追加到文件末尾
    t1.update()  # 一直更新输出


# 定义按钮事件相关函数
def fun1():
    sys.stdout = StdoutRedirector(t1)  # 重定向标准输出
    t1.delete(1.0, tk.END)  # 清除text文本框原来文字
    ternimal_print('程序运行开始.....')
    print('这是 按钮1 的输出文字')
    for i in range(30):
        ternimal_print(f'程序运行中。。。{i}')
        time.sleep(0.1)


def fun2():
    sys.stdout = StdoutRedirector(t1)  # 重定向标准输出
    t1.delete(1.0, tk.END)  # 清除原来终端输出的内容
    ternimal_print('程序运行开始.....')
    print('这是 按钮2 的输出文字')
    ternimal_print('程序运行结束')


# 定义按钮相关组件
frm1 = tk.Frame(root)
frm1.pack()
button1 = tk.Button(frm1, text='功能1', font=('宋体', 12, 'bold'), command=fun1)
button1.pack(side='left', padx=20, pady=20, ipadx=20, ipady=10)
button2 = tk.Button(frm1, text='功能2', font=('宋体', 12, 'bold'), command=fun2)
button2.pack(side='left', padx=20, pady=20, ipadx=20, ipady=10)
button3 = tk.Button(frm1, text='退出', font=('宋体', 12, 'bold'), command=root.quit)
button3.pack(side='left', padx=20, pady=20, ipadx=20, ipady=10)

# 定义Laber组件
frm2 = tk.Frame(root)
frm2.pack(anchor='w')
l1 = tk.Label(frm2, text='程序运行日志:', font=('宋体', 12))
l1.pack(side='left', padx=1, pady=1, ipadx=1, ipady=1)

# 定义滚动文本组件
frm3 = tk.Frame(root)
frm3.pack(anchor='w')
t1 = scrolledtext.ScrolledText(frm3, width=200, height=300, bg='#cfdccf', font=('宋体', 13))
t1.pack(fill='both', side='left', expand=True)

# 启动默认打开帮助页面
sys.stdout = StdoutRedirector(t1)  # 重定向标准输出到t1
print('欢迎使用,这是测试文字')

# 启动窗口main
tk.mainloop()

效果如下:

  • 11
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值