Найти - Пользователи
Полная версия: Tk,обновление виджета Text автоматически
Начало » GUI » Tk,обновление виджета Text автоматически
1
Cergei
Здравствуйте.
1)Хочу сделать программку для считывания определенных данных в виджет Text автоматически,через определенный интервал.При этом нужно чтоб смог и кнопки нажимать для управления,а не крутилась программка в одном цикле обновления Text.

2) Также хотел спросить есть возможность в поле Text выводить информацию с новой строки,не затирая старую ?
FishHook
Делайте таймер в другом потоке
4kpt_IV
FishHook ты не прав, дядька. С потоками Tkinter очень сильно не дружит. Там ломается все, хотя есть хак, как запустить в отдельном потоке.

Тут есть несколько вариантов:
1. Запускать вообще как отдельное приложение бекграунд задачу использую сельдерей или RQ.
2. Использовать хак, который позволяет запустить GUI в отдельном потоке.
3. Построить систему на коллбеках (сложно тестировать и вообще овер).

По второму вопросу. Да можно. Вместо индекса нужно использовать (“END”).
doza_and
Cergei
через определенный интервал
Тут важно понимать сколько времени считывание занимает. Если все проходит быстро и безболезненно то таймер и без тредов позволит решить задачу.
4kpt_IV
С потоками Tkinter очень сильно не дружит.
А OnIdle в Tk нет?
Cergei
По таймеру само то.
Теперь сообразить как сделать таймер и чтоб он вызывался.Ведь Tk крутится постоянно в одном цикле и прервать его можно через кнопку->bind.

Таймер делаем через модуль time ? с помощью time.time() ? Но как то попасть надо на строчку time.time() в Tk…..
doza_and
Cergei
По таймеру само то.
Теперь сообразить как сделать таймер и чтоб он вызывался.
Вы не поняли. Я имел ввиду таймер Tk который изначально встроен в mainloop

https://ru.wikiversity.org/wiki/%D0%9A%D1%83%D1%80%D1%81_%D0%BF%D0%BE_%D0%B1%D0%B8%D0%B1%D0%BB%D0%B8%D0%BE%D1%82%D0%B5%D0%BA%D0%B5_Tkinter_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0_Python#after.2C_after_idle_.D0.B8_after_cancel.5B3.5D

 from Tkinter import *
import time
def tick():
    label.after(200, tick)
    label['text'] = time.strftime('%H:%M:%S')
root=Tk()
label = Label(font='sans 20')
label.pack()
label.after_idle(tick)
root.mainloop()
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB