Вывод текста из консоли в окно 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))
