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()

效果如下:

### 回答1: Python tkinter 输出框是一个用于显示文本或图形的窗口部件,可以在图形用户界面中使用。它可以用于显示程序的输出结果、错误信息、日志等。在 tkinter 中,输出框可以通过 Text 或 ScrolledText 类来创建。Text 类提供了一个基本的文本框,而 ScrolledText 类则提供了一个带有滚动条的文本框,可以方便地查看大量的文本内容。使用这些类创建输出框非常简单,只需要设置相应的属性和方法即可。 ### 回答2: Python tkinter 是一个非常流行的 GUI 库,它能够帮助我们创建出各种各样的用户界面。当我们在编写一个程序的时候,往往需要在界面中添加一些输出框,这些输出框能够将程序处理过程中的一些信息向用户输出。在 tkinter 中,我们可以使用 Text 控件来实现输出框的功能。 首先,我们需要创建一个 Text 控件。使用如下代码来创建: ``` output_frame = Frame(root) output_text = Text(output_frame, width=100, height=20) output_text.pack() ``` 这里我们首先创建了一个 Frame,用来容纳 Text 控件。然后创建了一个 Text 控件,并将其放置在 Frame 中。 接着,我们需要在程序中使用 Text 控件输出信息。使用如下代码来将信息输出到 Text 控件中: ``` output_text.insert(END, "Hello World!") ``` 这里,我们使用了 insert 方法来将文本插入到 Text 控件中。其中,END 表示插入的位置为 Text 的最后一个字符位置。 除了插入文本之外,我们还可以对 Text 控件中的内容进行修改、删除等操作。使用如下代码来删除 Text 中的全部内容: ``` output_text.delete("1.0", END) ``` 这里,我们使用了 delete 方法来删除 Text 控件中的内容。其中,"1.0" 表示删除的起点为第一行第一个字符的位置,END 表示删除的终点为 Text 的最后一个字符位置。 总之,在 Python tkinter 中使用 Text 控件来实现输出框非常简单,只需要创建一个 Text 控件,然后使用 insert 方法来向其中插入文本即可。如果需要对其中的内容进行修改、删除等操作,也可以使用 delete 方法来实现。这些都能够帮助我们更好地实现程序的功能。 ### 回答3: Python Tkinter是一个流行的Python GUI库,用于构建Python应用程序的用户界面。其中一个重要组件是输出框(Text),它提供了一个多行文本编辑器,用户可以在其中添加、删除和查看文本。在本篇文章中,我们将简要介绍如何使用Python Tkinter创建和使用输出框。 1.创建输出框 在Python Tkinter中,使用Text()函数创建输出框。例如: from tkinter import * root = Tk() text_widget = Text(root) text_widget.pack() root.mainloop() 上面的代码创建了一个输出框和一个窗口。要显示输出框,必须将其使用pack()函数添加到root窗口中。在Text()函数中,可以传递许多参数,例如宽度和高度等。可以使用insert()函数在输出框中添加文本。 2.添加文本 可以使用insert()函数向输出框添加文本。文本添加在指定的索引处,可以是开始(INSERT)或末尾(END),也可以是中间。例如: text_widget.insert(END, "Hello World") 上面的代码将“Hello World”字符串添加到输出框的末尾。你也可以使用索引插入文本。例如: text_widget.insert(0.0, "Hello World") 上面的代码在输出框的第一行添加文本“Hello World”。 3.查看文本 可以使用get()函数来获取输出中的文本。例如: text = text_widget.get("1.0", END) 上面的代码获取输出框的文本,从第一行第一个字符开始,直到末尾。 4.删除文本 可以使用delete()函数来删除输出中的文本。例如: text_widget.delete("1.0", END) 上述代码删除了输出中的所有文本。 总之,在Python Tkinter中,输出框是一种有用的工具,可以用于多行文本输入、输出和查看等。它可以帮助用户在Python应用程序中创建交互式用户界面。以上所述是关于Python Tkinter输出框的简要介绍,希望对你有所帮助。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值