当前位置: 首页 > 面试题库 >

如何将打印语句重定向到Tkinter文本小部件

徐学潞
2023-03-14
问题内容

我有一个Python程序,它执行一组操作并在STDOUT上打印响应。现在,我正在编写一个GUI,它将调用已经存在的代码,并且我想在GUI中打印相同的内容,而不是STDOUT。我将为此使用文本小部件。我不想修改执行该任务的现有代码(其他一些程序也使用此代码)。

有人可以指出我如何使用此现有任务定义并使用其STDOUT结果并将其插入文本小部件中吗?在主GUI程序中,我想调用此任务定义并将其结果打印到STDOUT。有没有办法使用这些信息?


问题答案:

您可能可以通过替换sys.stdout为自己的写入文本小部件的类似文件的对象来解决此问题。

例如:

import Tkinter as tk
import sys

class ExampleApp(tk.Tk):
    def __init__(self):
        tk.Tk.__init__(self)
        toolbar = tk.Frame(self)
        toolbar.pack(side="top", fill="x")
        b1 = tk.Button(self, text="print to stdout", command=self.print_stdout)
        b2 = tk.Button(self, text="print to stderr", command=self.print_stderr)
        b1.pack(in_=toolbar, side="left")
        b2.pack(in_=toolbar, side="left")
        self.text = tk.Text(self, wrap="word")
        self.text.pack(side="top", fill="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):
        '''Illustrate that using 'print' writes to stdout'''
        print "this is stdout"

    def print_stderr(self):
        '''Illustrate that we can write directly to stderr'''
        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("end", str, (self.tag,))
        self.widget.configure(state="disabled")

app = ExampleApp()
app.mainloop()


 类似资料:
  • 问题内容: 我正在尝试将函数的标准输出重定向到tkinter文本小部件。我遇到的问题是,它会将每一行写到一个新窗口中,而不是将所有内容都列出在一个窗口中。该函数扫描目录并列出任何0k文件。如果没有文件为0k,则将其打印出来。因此,问题在于,如果目录中有30个0k文件,它将打开30个窗口,每个窗口只有一行。现在,我知道问题出在哪里。如果您查看我的功能代码,我会告诉您: 我知道,每次os.stat看到

  • 问题内容: 我的基本程序从脚本GUI.py导入了它的GUI界面。 在我的GUI.py中: 但是它的作用是打开两个窗口,第一个窗口 (顶层 窗口 ) 按预期工作,第二个窗口 处于空闲状态 , 这是期望的,直到我单击某个按钮 ,该 按钮 在连续按下后打印数据,并且打印的数据应出现在第二个窗口的文本小部件中, 但是 不会发生,程序也没有响应,当我关闭“顶层”窗口时,会出现错误消息 “ TclError:

  • 问题内容: 我想使用python将打印重定向到.txt文件。我有一个“ for”循环,当我要将所有这些输出重定向到一个文件时,它将“打印”每个文件的输出。所以我试着把 在我的脚本的开头。但是,.txt文件中什么也没有。我的脚本是: 所以有什么问题?除了此sys.stdout以外,还有其他方法吗? 我需要我的结果看起来像: 问题答案: 最明显的方法是打印到文件对象: 但是,重定向标准输出对我也有效。

  • 问题内容: 有没有一种方法可以将所有打印输出保存到python中的txt文件中?可以说我的代码中有这两行,我想将打印输出保存到名为的文件中。 我希望文件包含 问题答案: 给一个关键字参数,其中参数的值是文件流。我们可以使用以下功能创建文件流: 从Python文档中有关: 所述参数必须是与对象方法; 如果不存在或,将使用。 和文档: 打开并返回相应的文件对象。如果无法打开文件,则引发。 在作为第二个

  • 问题内容: 尝试学习tkinter和python。我想在相邻框架中显示“文本”小部件的行号 我在一个名为unpythonic的网站上看到了一个示例,但该示例假定txt的行高为6像素。 我正在尝试这样的事情: 1)将Any-KeyPress事件绑定到一个返回发生按键的行的函数: 不幸的是,这在框架上给出了一些奇怪的数字。有没有更简单的解决方案?如何处理呢? 问题答案: 我有一个相对简单的解决方案,但

  • 问题内容: 我有一个文本文件,需要将其打印到特定的网络打印机。我知道打印机的名称。 到目前为止,我已经创建了Printable类来打印文件(票证)。 我这样称呼TicketPrintPage: 它的工作原理还不错,但是: -我的文本不多于一页(找到了一些算法,但是很好) -我不知道打印机何时完成打印,如果我尝试打印两页如果打印机连续打印了多张票证,则会返回“打印机未就绪”消息。 所以问题又来了:没