【tkinter】将 print 输出到 tk.Text 中

本文介绍如何使用Python的Tkinter库将标准输出和错误输出重定向到Text组件,便于实时查看和记录。通过TextRedirector类实现控制台输出到Text widget的功能,适合用于日志记录或调试程序。

原文链接👉https://stackoverflow.com/questions/12351786/how-to-redirect-print-statements-to-tkinter-text-widget

import tkinter as tk
import sys

class ExampleApp(tk.Tk):
    def __init__(self):
        super(ExampleApp, self).__init__()

        toolBar = tk.Frame(self)
        toolBar.pack(side=tk.TOP, fill=tk.X)

        button1 = tk.Button(self, text='print to stdout', command=self.print_stdout)
        button2 = tk.Button(self, text='print to stderr', command=self.print_stderr)
        button1.pack(in_=toolBar, side=tk.LEFT)
        button2.pack(in_=toolBar, side=tk.LEFT)

        self.text = tk.Text(self, wrap='word')
        self.text.pack(side=tk.TOP, fill=tk.BOTH, expand=True)
        self.text.tag_configure('stderr', foreground='#b22222')

        sys.stdout = TextRedirector(self.text, 'stdout')
        sys.stderr = TextRedirector(self.text, 'stderr')

    def print_stdout(self):
        print('this is stdout')

    def print_stderr(self):
        sys.stderr.write('this is stderr\n')

class TextRedirector(object):
    def __init__(self, widget, tag='stdout'):
        self.widget = widget
        self.tag = tag

    def write(self, str):
        self.widget.configure(state='normal')
        self.widget.insert(tk.END, str, (self.tag,))    # (self.tag,) 是设置配置
        self.widget.configure(state='disabled')

if __name__ == '__main__':
    app = ExampleApp()
    app.mainloop()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值