Форум сайта python.su
Добрый день. Подскажите, почему при нажатии на кнопку текст отображается не сразу, а только когда функция закончит работу.
from tkinter import * import time def txt(log): log.insert(END, 'Текст только через три секунды, почему и как исправить?') #Задержка, только чтобы показать, что текст выводится не сразу. time.sleep(3) root = Tk() root.geometry('150x150') fr = Frame(root).grid() button = Button(fr, text = 'Print text', command = (lambda: txt(log))) button.grid(row = 0, column = 0, sticky = W) log = Text(fr, width = 20, height = 8, wrap = WORD) log.grid(row = 1, column = 0) root.mainloop()
Офлайн
sleep вообще ломает нормальный поток событий.
Для того, чтобы виджеты сразу реагировали на изменения можно использовать widget.update(). Это также помогает, когда операции выполняются в цикле.
P.S. Лучше from tkiter import * никогда не делать. Это плохо, очень плохо
Офлайн
4kpt_III Спасибо, помогло. А как импортировать лучше, import tkinter или через from, но поименно?
Офлайн
Есть варианты:
import tkinter
import tkinter as tk
from tkinter import Tk, Button, Text
Офлайн