Python tkinter: вывести любой вывод в текстовое поле в графическом интерфейсе не в оболочке

Я создаю графический интерфейс с использованием python и tkinter и просто задаюсь вопросом, есть ли вообще какой-либо выходной текст в окне графического интерфейса, а не на интерпретаторе/оболочке?

Заранее спасибо

Ответ 1

Если, как было предложено в комментарии Брайана Окли, вы хотите "напечатать" foo "в вашем графическом интерфейсе, но волшебным образом его увидеть в текстовом виджете", см. ответы в предыдущем вопросе Python: конвертирование CLI в графический интерфейс. В этом ответе рассматривается более простой вопрос о том, как создавать выходные данные в текстовом поле. Чтобы создать прокручиваемое текстовое окно, создайте и поместите или упакуйте текстовый виджет (позвоните ему mtb), затем используйте команды типа mtb.insert(Tkinter.END, ms), чтобы добавить строку ms в текстовое поле mtb, и, как mtb.see(Tkinter.END), чтобы сделайте прокрутку окна. (Подробнее см. "Документация Tkinter Text Widget" ). Например:

#!/usr/bin/env python
import Tkinter as tk

def cbc(id, tex):
    return lambda : callback(id, tex)

def callback(id, tex):
    s = 'At {} f is {}\n'.format(id, id**id/0.987)
    tex.insert(tk.END, s)
    tex.see(tk.END)             # Scroll if necessary

top = tk.Tk()
tex = tk.Text(master=top)
tex.pack(side=tk.RIGHT)
bop = tk.Frame()
bop.pack(side=tk.LEFT)
for k in range(1,10):
    tv = 'Say {}'.format(k)
    b = tk.Button(bop, text=tv, command=cbc(k, tex))
    b.pack()

tk.Button(bop, text='Exit', command=top.destroy).pack()
top.mainloop()

Обратите внимание: если вы ожидаете, что текстовое окно будет оставаться открытым в течение длительного времени и/или накапливать гигабайты текста, возможно, отслеживайте, сколько данных находится в текстовом поле, и используйте метод delete с интервалами, чтобы ограничить его.