Форум программистов, компьютерный форум, киберфорум
Python: Tkinter
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.85/34: Рейтинг темы: голосов - 34, средняя оценка - 4.85
1 / 1 / 0
Регистрация: 12.09.2013
Сообщений: 32
1

Не работает обновление Label в tkinter

27.06.2016, 19:53. Показов 6951. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте.
Возникла проблема в с обновлением Label в tkinter.
Наша программа должна открывать файл, брать от туда слова и выводить их по одному на экран (очищая экран от предыдущего слова).
С учётом того что я не программист (но сверхлёгкие познания с++ и питона есть), то взял за основу работающий код и переписал его для своих нужд.
Кликните здесь для просмотра всего текста
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
import os
 
import time
 
from tkinter import *
 
WORK_PATH = os.path.abspath(os.getcwd())
 
root = Tk()
 
root.overrideredirect(1)
 
root.geometry("100x100+0+0")
 
bg_image = PhotoImage(file=os.path.join(WORK_PATH, 'stereo.gif'))
 
bg = Label(root, image=bg_image)
 
bg.pack()
 
 
def clock(event):
    while event:
        time_from_out = time.strftime("%H:%M:%S")
 
        clock_value = Label(root, bg='black', fg='green', text=time_from_out, font=('Comic Sans MS', 8))
 
        clock_value.place(x='22', y='35')
 
        root.update()
 
 
clock(Event)
 
root.mainloop()

Этот код работает...


Мой код.
В основном работает. Файл открывается, слова выводятся... Проблема заключается в том, что если после длинного слова идёт маленькое, то часть длинного слова видна...
Мой код:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
from tkinter import *
import time
 
root = Tk()
root.overrideredirect(1)
root.geometry("1366x768+0+0")
bg_image = PhotoImage(file="stereo.gif")
bg = Label(root, image=bg_image)
bg.pack()
 
def clock(event): # где-то в этой функции проблема....
    file_open = open("text.txt", "r", encoding="utf-8")
    while event:
        for line in file_open.readlines():
            words = line.split(" ")
            for word in words:
                clock_value1 = Label(root, bg="white", fg='black', text=word, font=('Times New Roman', 14))
                clock_value1.place(x='610', y='371')
                time.sleep(1)
                root.update()
 
 
    file_open.close()
 
 
clock(Event)
 
root.mainloop()
Скриншот проблемы:
Видно слово "are" на фоне предыдущих слов...

Пожалуйста, помогите исправить код чтоб он работал нормально.
Заранее благодарен за Вашу помощь! :-)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.06.2016, 19:53
Ответы с готовыми решениями:

tkinter, разобраться с label
В label записан текст, этот текст может генерироваться, например вот так, lbl2 =...

Параметры Label Python Tkinter
Доброго времени суток, написал программу и установил фон. Но Label выходит за границы выделенной...

Невозможно изменить текст в label, в tkinter
Здравствуйте, уважаемые, формучане, решил ради интереса и практического изучение либры tkinter...

Не отображается изображение (Python, tkinter, label)
Здравствуйте! Помогите, пожалуйста, по ключу присваиваю label_image изображение в функции init, но...

Остается след после удаления label (Tkinter)
Здравствуйте, пишу задание "Написать программу, которая вводит номер некоторого года нашей эры и...

9
Эксперт по компьютерным сетям
5898 / 3355 / 1035
Регистрация: 03.11.2009
Сообщений: 10,003
27.06.2016, 22:54 2
Python
1
2
3
4
5
6
7
8
9
txt = StringVar()
clock_value1 = Label(root, bg="white", fg='black', textvariable=txt, font=('Times New Roman', 14))
 
...
 
for word in words:
    txt.set(word)
    time.sleep(1)
    root.update()
1
1 / 1 / 0
Регистрация: 12.09.2013
Сообщений: 32
27.06.2016, 23:48  [ТС] 3
Спасибо за ответ, но....
1. Код Ваш я по другому вставил.
2. Новая странная проблема: текст начинает замедлятся... Сначала скорость постоянная, а через секунд 10 слова всё медленнее меняются (сразу чувствуется смена скорости)...

Мой код
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
from tkinter import *
import time
 
root = Tk()
root.overrideredirect(1)
root.geometry("1366x768+0+0")
bg_image = PhotoImage(file="stereo.gif")
bg = Label(root, image=bg_image)
bg.pack()
 
def clock(event):
    file_open = open("text.txt", "r", encoding="utf-8")
    txt = StringVar()
    while event:
        for line in file_open.readlines():
            words = line.split(" ")
            for word in words:
                txt.set(word)
                clock_value1 = Label(root, bg="white", fg='black', textvariable=txt, font=('Times New Roman', 14))
                clock_value1.place(x='720', y='360')
                time.sleep(0.02)
                root.update()
 
 
    file_open.close()
 
 
clock(Event)
 
root.mainloop()
0
2740 / 2339 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
27.06.2016, 23:50 4
Блин использовать sleep в гуях....
.after же есть...
0
1 / 1 / 0
Регистрация: 12.09.2013
Сообщений: 32
28.06.2016, 00:10  [ТС] 5
Я же не программист.... Где код исправить?

Добавлено через 14 минут
clock_value1.after(100) вместо time.sleep(0.02) поставил, но всё равно ест замедление...
txt файл размером 1 Мб - это может повлиять на скорость?
0
141 / 141 / 38
Регистрация: 20.02.2012
Сообщений: 597
28.06.2016, 07:50 6
я код не запускал, но почему вы в цикле создаете кучу лейблов, вставляете в одно и тоже место. а апдейт тут не лишнее?
0
1 / 1 / 0
Регистрация: 12.09.2013
Сообщений: 32
28.06.2016, 11:20  [ТС] 7
Решено.
Полный код (вдруг кому пригодиться):
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
from tkinter import *
import time
 
root = Tk()
root.overrideredirect(1)
root.geometry("1366x768+0+0")
bg_image = PhotoImage(file="stereo.gif")
bg = Label(root, image=bg_image)
bg.pack()
 
def clock(event):
    file_open = open("text.txt", "r", encoding="utf-8")
    txt = StringVar()
    clock_value1 = Label(root, bg="white", fg='black', textvariable=txt, font=('Times New Roman', 14))
    clock_value1.place(x='720', y='360')
    while event:
        for line in file_open.readlines():
            words = line.split(" ")
            for word in words:
                txt.set(word)
                clock_value1.after(50)
                root.update()
 
    file_open.close()
 
clock(Event)
 
root.mainloop()
Выражаю благодарность всем кто мне ответил и направил на правильный путь решения проблемы!
0
141 / 141 / 38
Регистрация: 20.02.2012
Сообщений: 597
28.06.2016, 11:29 8
посмотрите в сторону with, для работы с файлами
0
Эксперт по компьютерным сетям
5898 / 3355 / 1035
Регистрация: 03.11.2009
Сообщений: 10,003
28.06.2016, 11:32 9
и в сторону классов для gui
0
2740 / 2339 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
28.06.2016, 11:34 10
и в сторону обновления виджета, а не создания новых
0
28.06.2016, 11:34
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.06.2016, 11:34
Помогаю со студенческими работами здесь

Обновление фрейма в tkinter
Существует 2 фрейма, которые располагаются горизонтально, правый фрейм содержит OptionMenu, а левый...

Накладывается текст один на другой. Tkinter, виджет Label
Помогите решить дилемму: я написал простой чат на python(визуализировал с помощью tkinter) и при...

Нужен код программы выводящей в tkinter, Label шахматную задачу
На форуме есть пример кода вывода шахматной доски без фигур. Хотел использовать код решения...

Обновление label
Суть создал небольшой макет. Привязал button к нажатию с клавиатуры Выдает ошибку NameError:...

Обновление компонента Label
Добрый всем день! Проблема такая: не обновляется значение label. В общем есть таймер, который...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru