Вывод текста из консоли в окно Tkinter

Помогите пожалуйста разобраться с Tkinter, возможен ли вывод всего текста который пишется в консоли в окно Tkinter? Если да то как это реализовать?


Ответы (1 шт):

Автор решения: insolor

Создаем объект-обертку над Text, который будет вести себя как файловый объект (будет поддерживать запись в него через метод write), и подменяем им объект стандартного вывода (sys.stdout) с помощью контекстного менеджера redirect_stdout:

import tkinter as tk
from contextlib import redirect_stdout


class TextWrapper:
    text_field: tk.Text

    def __init__(self, text_field: tk.Text):
        self.text_field = text_field

    def write(self, text: str):
        self.text_field.insert(tk.END, text)

    def flush(self):
        self.text_field.update()


root = tk.Tk()

text = tk.Text(root)
text.pack()

with redirect_stdout(TextWrapper(text)):  # подменяем объект sys.stdout на свой объект
    print("Hello!!!!")  # print внутри вызывает метод write объекта sys.stdout

print("Hello again")  # Вывод в консоль

root.mainloop()

Также такой псевдо-файловый объект можно просто указать через параметр file функции print и не делать подмену sys.stdout:

root = tk.Tk()

text = tk.Text(root)
text.pack()

print("Hello!!!!", file=TextWrapper(text))

Скриншот

→ Ссылка