Tkinter-重定向知识-怎么把print的输出重定向到tkinter?

2 篇文章 0 订阅

方法目录

        方法一:重定向至文件

        方法二:自制重定向类

        方法三:直接设置

这其实是很简单,有几种方法,在我最近开发的库里,就有这个案例

现在,我把它搬过来介绍介绍

方法一:重定向至文件

这个我不太推荐,因为我们如果是要用它去做软件的话,非常的麻烦。它的概念其实是把print的输出打印到文件里,你若要把它输出到tkinter的GUI,那还得读取文件,再把读取出的信息插入到tkinter里。(也就是open文件)

先说一下代码,这个是重定向的

import sys

file = open("file.txt","w") # 目标文件
output = sys.stdout # 备份
sys.stdout = file # 重定向
print("test") # 打印到文件
sys.stdout = output # 还原

然后获取:

with open("file.txt","r") as f:
    print(f.read())
    f.close()

方法二:自制重定向类

这个是我觉得比较好的,因为它的局限性比较小,你可以自己决定重定向至那里,所以我个人比较推荐这个方法

这是一个示例自定义重定向类:

# 这个类sys自己会调用write,所以起到了重定向的效果

class StdoutRedirector(object):
    def __init__(self, text_widget):
        self.text_space = text_widget
        # 备份
        self.stdoutbak = sys.stdout
        self.stderrbak = sys.stderr

    def write(self, str):
        self.text_space.delete(0.0, END)
        self.text_space.insert(END, "\n"+str)
        self.text_space.insert(END, '\n')
        self.text_space.see(END)
        # 刷新显示
        self.text_space.update()

    def restoreStd(self):
        # 还原
        sys.stdout = self.stdoutbak
        sys.stderr = self.stderrbak

    def flush(self):
        # 这个类必须得有,不然会报错
        pass

这个就简单许多,就是相对来说比较复杂

调用的话,可不是直接调用类,而是要用下面的格式:

# (!)注意,tkinter小部件只能是文本类(!)

output = sys.stdout # 二级备份
sys.stdout = StdoutRedirector("这里面输入你的tkinter部件变量")
print("test") # 重定向至tkinter小部件
sys.stdout = output # 还原

是不是很简单?

方法三:直接设置

这个方法面向pycharm的用户,再配置>python>执行>重定向至就可以设置了,但是,这个也是重定向至文件里哦

谢谢阅读我的文章,你的鼓励是我最大的动力!

本文为 wsw的日常 原创,未经允许,严禁转载!违者必究!

  • 3
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值