Cergei
Дек. 25, 2016 02:53:43
Здравствуйте.
1)Хочу сделать программку для считывания определенных данных в виджет Text автоматически,через определенный интервал.При этом нужно чтоб смог и кнопки нажимать для управления,а не крутилась программка в одном цикле обновления Text.
2) Также хотел спросить есть возможность в поле Text выводить информацию с новой строки,не затирая старую ?
FishHook
Дек. 25, 2016 07:41:58
Делайте таймер в другом потоке
4kpt_IV
Дек. 25, 2016 09:42:30
FishHook ты не прав, дядька. С потоками Tkinter очень сильно не дружит. Там ломается все, хотя есть хак, как запустить в отдельном потоке.
Тут есть несколько вариантов:
1. Запускать вообще как отдельное приложение бекграунд задачу использую сельдерей или RQ.
2. Использовать хак, который позволяет запустить GUI в отдельном потоке.
3. Построить систему на коллбеках (сложно тестировать и вообще овер).
По второму вопросу. Да можно. Вместо индекса нужно использовать (“END”).
doza_and
Дек. 26, 2016 08:41:00
Cergei
через определенный интервал
Тут важно понимать сколько времени считывание занимает. Если все проходит быстро и безболезненно то таймер и без тредов позволит решить задачу.
4kpt_IV
С потоками Tkinter очень сильно не дружит.
А OnIdle в Tk нет?
Cergei
Дек. 26, 2016 10:15:58
По таймеру само то.
Теперь сообразить как сделать таймер и чтоб он вызывался.Ведь Tk крутится постоянно в одном цикле и прервать его можно через кнопку->bind.
Таймер делаем через модуль time ? с помощью time.time() ? Но как то попасть надо на строчку time.time() в Tk…..
doza_and
Дек. 27, 2016 07:49:47
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()