Уведомления

Jabber-конференция сообщества: pythonua@conference.jabber.ru

#1 Ноя. 28, 2016 09:24:04

Antarius
Зарегистрирован: 2016-11-28
Сообщения: 29
Репутация: +  0  -
Профиль   Отправить e-mail  

Начинает тормозить TKinter

Здравствуйте.
Я новичек, и ни разу не программист, но вот приспичило написать графический интерфейс для прибора.
Так сказать прибор - малина, на которой крутится распибиан, на ней питон, в питоне с цикличностью раз в 30 секунд считываются по I2C данные от датчика.
Данные вносятся в массив, массив сдвигается на одну позицию каждое считываение и так по кругу.
В общем, обычный детский сад, почти метеостанция с bmp280, как многие делают.

На дисплее TKinterом во все окно рисуется морда, на которой отображется график из массива.
График рисуется canv.create_line(….) кусочками, соединяя соседние данные из массива.
Перед новой итерацией делается canv.delete('all') и по новой рисуется график.
График появляется мгновенно, все хорошо.
Но так работает примерно часа два. Потом начинаются тормоза - график начинает медленно отрисовываться, кривая медленно ползет слева направо.

Как это пообороть?
Предлагать не TKinter не нужно, т.к. на его изучение потрачено время и другое изучать некогда и не хочется.
Может есть способ нарисовать как-то в память, а потом мгновенно все отобразить, чтобы от пользователя был скрыт процесс рисования.
Спасибо.


Отредактировано Antarius (Ноя. 28, 2016 09:25:22)

Офлайн

#2 Ноя. 28, 2016 10:32:27

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 5437
Репутация: +  386  -
Профиль   Отправить e-mail  

Начинает тормозить TKinter

Antarius
Предлагать не TKinter не нужно
А я все-таки предложу. Прикол в том, что у питона есть либа для рисования графиков, там разобраться не проблема
http://matplotlib.org



Офлайн

#3 Ноя. 28, 2016 10:46:09

Antarius
Зарегистрирован: 2016-11-28
Сообщения: 29
Репутация: +  0  -
Профиль   Отправить e-mail  

Начинает тормозить TKinter

Спасибо.
Я смотрел эту либу. И оставил ее на крайний случай.
Не верю я, что нарисовать график из 600 точек - это более тяжелая задача, чем взлететь матплоту со всеми свистоперделками в нем.
Да и я на ткинтере все написал сам, и масштабирование, и оси и подписи, и значения и экстремумы и прочее. И даже красивее,чем в матплоте…. Но тупиииит, зараза. Помогите!

ЗЫ.
В 1996 году я изучал qbasic в школе, и на контрольных рисовал какие-то графики по массивам. И на олимипиадах на паскале чет писал подобное. И оно не тупило, по крайней мере не раздражало.
Прошло каких-то 20 лет… те же задачи, гигарцы вычислительной мощности в утюгах - и чет я разочарован… Или дело в питоне, или руки кривые.

Отредактировано Antarius (Ноя. 28, 2016 10:47:03)

Офлайн

#4 Ноя. 28, 2016 14:44:50

Antarius
Зарегистрирован: 2016-11-28
Сообщения: 29
Репутация: +  0  -
Профиль   Отправить e-mail  

Начинает тормозить TKinter

В догонку воспрос. Решил изменение графика сделать не удалением всех объектов, и отрисовкой новых за каждую итерацию, а присвоить tags всем линиям и надписям и каждую итерацию их менять под новые данные, благо количество и примерное положение почти не изменяется.

Вопрос.
Допустим, я создал надпись
canv.create_text(10,10, text = ‘blablabla’, fill = “gray”, tags = ‘blatext’)

Затем я хочу переместить эту надпись и изменить текст

canv.coords('blatext', 15,15)
canv.itemconfig('blatext', text = ‘ myaoo’)

Вопрос - а почему от старой надписи остаются следы?

Отредактировано Antarius (Ноя. 28, 2016 14:45:55)

Офлайн

#5 Ноя. 28, 2016 15:40:16

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 5437
Репутация: +  386  -
Профиль   Отправить e-mail  

Начинает тормозить TKinter

Antarius
Или дело в питоне, или руки кривые.
Понимаете в чем дело, Tkinter - это питонья обертка над графическим тулкитом Tk, которому лет не меньше чем квик-бэйсику. Причины по которым его вообще еще используют - это относительная простота и портирование на кучу платформ (ну и личная привязанность Гвидо, разумеется). В стандартную библиотеку питона его включают еще и ввиду мизерного объема - жрать не просит. Не ждите от Tkinter особых возможностей и современных фич - их там нет.



Офлайн

#6 Ноя. 29, 2016 06:19:25

vic57
Зарегистрирован: 2015-07-07
Сообщения: 306
Репутация: +  47  -
Профиль   Отправить e-mail  

Начинает тормозить TKinter

Antarius
Может есть способ нарисовать как-то в память, а потом мгновенно все отобразить, чтобы от пользователя был скрыт процесс рисования.
Спасибо.
PIL

Офлайн

#7 Ноя. 29, 2016 09:22:34

Antarius
Зарегистрирован: 2016-11-28
Сообщения: 29
Репутация: +  0  -
Профиль   Отправить e-mail  

Начинает тормозить TKinter

Спасибо, не знал про PIL, посмотрю.
Подскажите еще по ткинтеру, чем отличается
canv.update()
от
canv.update_idletasks()
?

И зачем вообще нужен update, если и без него все рисуется?
Извините за нубские вопросы.
Спасибо.

Офлайн

#8 Ноя. 29, 2016 09:37:43

4kpt_IV
Зарегистрирован: 2016-01-08
Сообщения: 999
Репутация: +  48  -
Профиль   Отправить e-mail  

Начинает тормозить TKinter

update нужен когда происходит процесс и должен измениться интерфейс. Сам он не знает, что его состояние изменилось. Ну и циклические операции изменения. Во втором случае изменения произойдут только после завершения цикла. Если же нужно, чтобы изменения происходили поэтапно с каждым шагом цикла, тогда нужно вставлять update. Фактически это связано с передачей управления, но это Вам пока не нужно.

update_idletasks служит для получения размеров отдельных элементов. Так как после запуска команды отрисовка отдается на откуп графической системе, то ни о каких размерах речи быть не может (до отрисовки). Мало того, есть механизмы “растягивания” и “сжатия”, которые также заранее просчитать невозможно. В этом случае, когда возникает необходимость получения размеров без использования update_idletasks Вы получите “1х1+0+0”, поэтому необходимо предварительно вызывать этот метод.

P.S. Есть хорошая документация. Там это все написано

Офлайн

#9 Ноя. 29, 2016 10:59:53

Antarius
Зарегистрирован: 2016-11-28
Сообщения: 29
Репутация: +  0  -
Профиль   Отправить e-mail  

Начинает тормозить TKinter

К сожалению, чтобы легко читать и понимать такую документацию, надо быть программистом и читать ее каждый день. А когда твой уровень - найти онлайн учебник по ткинтеру, в котором “сейчас мы изучим ткинтер. рисуем кружочек. получилось? вау! а теперь квадратик! вы можете сделать с ними все что угодно, сами разберетесь, есть документация. Ура, мы изучили ткинтер”, то несколько трудновато.
Но да, это мои проблемы

Офлайн

#10 Ноя. 29, 2016 11:04:39

4kpt_IV
Зарегистрирован: 2016-01-08
Сообщения: 999
Репутация: +  48  -
Профиль   Отправить e-mail  

Начинает тормозить TKinter

Мне кажется мы говорим про разную документацию.
Я имею ввиду эту.

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version