Не работает tkinter консоль

Недавно начал писать текстовый редактор. Вот код консоли:

from contextlib import redirect_stdout
from contextlib import *
import sys
import io
from tkinter import *
import traceback

root=Tk()

text=Text(root,bg="black",fg="white")
text.pack()
code=('''print("Hi")''')
f = io.StringIO()

try:
    with redirect_stdout(f):
        exec(code)
        text.insert(1.0,f.getvalue())

except Exception as e:
    em = traceback.format_exc()
    text.insert(1.0,traceback.format_exc())
root.mainloop()

console

Всё бы ничего, но когда я пытаюсь запустить этот код:

(Код записывается в переменную code)

from tkinter import *

root=Tk()

def com():
   print("Hello")

b=Button(root,command=com)
b.pack()

Можете подсказать в чём проблема.


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

Автор решения: S. Nick

Если я вас правильно понял, попробуйте так:

from contextlib import redirect_stdout
from contextlib import *
import sys
import io
from tkinter import *
import traceback

root=Tk()

text = Text(root, bg="black", fg="white")
text.pack()
#code = ('''print("Hello World")''')

code = ('''
root=Tk()

def com():
    text.delete(1.0, END)
    with redirect_stdout(f):
        exec('print("Hello")')
        text.insert(1.0, f.getvalue())
    
b = Button(root, text='Click me', command=com)
b.pack()
''')

f = io.StringIO()

try:
    with redirect_stdout(f):
        exec(code)
except Exception as e:
    em = traceback.format_exc()
    text.insert(1.0, traceback.format_exc())
    
root.mainloop()

введите сюда описание изображения

→ Ссылка