Уведомления

Группа в Telegram: @pythonsu

#1 Май 24, 2015 17:42:00

ruthven
Зарегистрирован: 2015-05-20
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

Button + Text

Добрый день. Подскажите, почему при нажатии на кнопку текст отображается не сразу, а только когда функция закончит работу.

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()

Офлайн

#2 Май 24, 2015 17:50:43

4kpt_III
Зарегистрирован: 2014-12-22
Сообщения: 999
Репутация: +  39  -
Профиль   Отправить e-mail  

Button + Text

sleep вообще ломает нормальный поток событий.
Для того, чтобы виджеты сразу реагировали на изменения можно использовать widget.update(). Это также помогает, когда операции выполняются в цикле.

P.S. Лучше from tkiter import * никогда не делать. Это плохо, очень плохо

Офлайн

#3 Май 24, 2015 19:05:06

ruthven
Зарегистрирован: 2015-05-20
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

Button + Text

4kpt_III Спасибо, помогло. А как импортировать лучше, import tkinter или через from, но поименно?

Офлайн

#4 Май 24, 2015 19:17:53

4kpt_III
Зарегистрирован: 2014-12-22
Сообщения: 999
Репутация: +  39  -
Профиль   Отправить e-mail  

Button + Text

Есть варианты:

import tkinter

import tkinter as tk

from tkinter import Tk, Button, Text

Третий вариант когда количество используемых виджетов мало и импортируется только tkinter. Если же еще используется ttk, то только первый вариант. Ну как-то так. Первый вариант является универсальным.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version