如何将"stdout"重定向到Label小部件?

5 python label stdout tkinter

我正在尝试将stdout重定向到Label小部件.目标是在Label中"打印"我脚本中的所有Python打印.

但是当我点击时BUTTON1没有任何反应......

这是我的代码:

from Tkinter import *
import sys
import tkMessageBox


class App:

    def __init__(self, master):

        self.frame = Frame(master, borderwidth=5, relief=RIDGE)
        self.frame.grid()

        class IORedirector(object):
            def __init__(self,TEXT_INFO):
                self.TEXT_INFO = TEXT_INFO

        class StdoutRedirector(IORedirector):
            def write(self,str):
                self.TEXT_INFO.config(text=str)

        self.TEXT_HEADER = self.text_intro = Label(self.frame, bg="lightblue",text="MY SUPER PROGRAMM") ## HEADER TEXT
        self.TEXT_HEADER.grid(row=0, column=0, columnspan=2, sticky=W+E+N+S)

        self.MENU = Frame(self.frame, borderwidth=5, relief=RIDGE, height=12) 

        self.MENU.grid(row=1, column=0, sticky=N)

        self.button = Button(self.MENU, text="QUIT", fg="red", bg="red", command=self.frame.quit)
        self.button.grid(row=4, column=0)

        self.BUTTON1 = Button(self.MENU, text="BUTTON1", command=self.BUTTON1_CMD)
        self.BUTTON1.grid(row=0, column=0,sticky=W+E)

        self.TEXT_INFO = Label(self.frame, height=12, width=40, text="I WANT TO SEE THE STDOUT OUTPUT HERE", bg="grey",borderwidth=5, relief=RIDGE)
        self.TEXT_INFO.grid(row=1, column=1)

        sys.stdout = StdoutRedirector(self.TEXT_INFO)

    def BUTTON1_CMD(self):
        print "TEST NUMBER ONE"
        print "TEST NUMBER TWO"


root = Tk()
app = App(root)
root.mainloop()
Run Code Online (Sandbox Code Playgroud)

小智 4

您看不到文本集的原因是它在瞬间设置正确,然后立即设置为空白。这是因为 print 在 print 语句之后向 stdout 发送换行符。这是一个修改版本,它附加到标签,而不是为每个打印语句覆盖它。

    class StdoutRedirector(IORedirector):
        def write(self,str):
           self.TEXT_INFO.config(text=self.TEXT_INFO.cget('text') + str)
Run Code Online (Sandbox Code Playgroud)