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

原文链接👉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()
  • 7
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值