Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » GUI
  • » PyQt4. Пинаем QPaint из QThread. Уперся в 60 fps :-( [RSS Feed]

#1 Янв. 12, 2011 13:58:55

aaleksander
От:
Зарегистрирован: 2009-12-22
Сообщения: 31
Репутация: +  0  -
Профиль   Отправить e-mail  

PyQt4. Пинаем QPaint из QThread. Уперся в 60 fps :-(

Доброго времени суток, уважаемые. Помогите прояснить ситуацию.

Только начал присматриваться к PyQt4 и пока гоняю его на предмет производительности. Простая сцена из отскакивающих от стен линий и пятиугольников. Обновляется через поток.

Код потока выглядит так:

class thread(QtCore.QThread): #поток с нашей отрисовкой
def __init__(self):
QtCore.QThread.__init__(self)

def run(self):
self.running = True
self.pause = False
freq = 1/100.
lastRun = 0. #время последнего сигнала
while self.running:
if self.pause == False:
t = time()
if t - lastRun > freq: #пора обновляться
self.emit(QtCore.SIGNAL('doPaint()'))
lastRun = t
self.msleep(1)
Так вот: если поиграть с freq в пределах 1/10 - 1/70, то фпс исправно прыгает от 10 до 60.
Если же пытаюсь поднять фпс, то freq в пределах вообще на фпс не влияет. Ставильно 60, плюс-минус.

При этом, если цикл немного подравить:
        while self.running:
if self.pause == False:
#t = time()
#if t - lastRun > freq: #пора обновляться
self.emit(QtCore.SIGNAL('doPaint()'))
# lastRun = t
self.msleep(1)
То фпс подскакивает до 110-120.

Что я делаю не так? Весь мозг уже сломал.

Спасибо.

P.S. есть подозрение, что виноват time(). Если так, то что есть в питоне для точного измерения времения? Ничего не нашел.



Офлайн

#2 Янв. 12, 2011 15:50:39

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

PyQt4. Пинаем QPaint из QThread. Уперся в 60 fps :-(

Есть подозрение, что у вас Windows.
Странная хотелка - заботится об FPS на отрисовке Qt



Офлайн

#3 Янв. 12, 2011 16:09:44

aaleksander
От:
Зарегистрирован: 2009-12-22
Сообщения: 31
Репутация: +  0  -
Профиль   Отправить e-mail  

PyQt4. Пинаем QPaint из QThread. Уперся в 60 fps :-(

Да, под винды. Но дома стоит Убунту - тоже будет там работать.
Вообще, есть идея разработать небольшую,расширяемую ГИС.
У меня уже есть наработки. Но они написаны на Делфи. Сейчас начал разрабатывать редактор карт для системы. Можно загрузить подложку (отсканированную карту), создать полигоны, дороги разной толщины. Все это двигается, редактируется, масштабируется. Почти как Корел. Осталось только дома сделать.

Но, честно говоря, хочется попробовать питон в этом деле. Нравится мне этот язык. Вот и ищу подходящую библиотеку. Qt4 вроде оптимален. Хотя надо почитать лицензию.

Не могу картинку прикрепить. Вот: http://s19.radikal.ru/i192/1101/85/fae973a5c071.png



Отредактировано (Янв. 12, 2011 16:11:52)

Офлайн

#4 Янв. 12, 2011 16:34:22

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

PyQt4. Пинаем QPaint из QThread. Уперся в 60 fps :-(

А отчего тогда упор в FPS - GIS ведь не game development.
Кеширование слоев решит все проблемы.



Офлайн

#5 Янв. 12, 2011 18:55:51

aaleksander
От:
Зарегистрирован: 2009-12-22
Сообщения: 31
Репутация: +  0  -
Профиль   Отправить e-mail  

PyQt4. Пинаем QPaint из QThread. Уперся в 60 fps :-(

Андрей Светлов
А отчего тогда упор в FPS - GIS ведь не game development.
Кеширование слоев решит все проблемы.
Да просто проверял, как работает. Напоролся вот на такой казус, хотел спросить :-) В принципе, 30 линий и 30 пятиугольников в окне 640х480, 60 FPS - более чем достаточно для моих целей.

Подскажите еще такую вещь. Насколько просто потом будет переползти c PyQt4 на PySide и стОит ли? Мало ли как обернется и захочется сделать коммерческий вариант :-)



Офлайн

#6 Янв. 12, 2011 19:16:13

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

PyQt4. Пинаем QPaint из QThread. Уперся в 60 fps :-(

Сложностей не наблюдается, но пройтись с ручными правками по исходникам придется.



Офлайн

#7 Янв. 12, 2011 19:38:06

udav
От:
Зарегистрирован: 2010-05-30
Сообщения: 43
Репутация: +  0  -
Профиль   Отправить e-mail  

PyQt4. Пинаем QPaint из QThread. Уперся в 60 fps :-(

Тогда уж подскажите и мне - существует ли стабильная версия PySide для Python31?



Офлайн

#8 Янв. 12, 2011 19:54:04

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

PyQt4. Пинаем QPaint из QThread. Уперся в 60 fps :-(

Даже нестабильная не существует, насколько я знаю.
В их планах портирование на тройку должно быть после выхода первого официального релиза 1.0 (если, конечно, не найдется доброволец-энтузиаст).



Офлайн

  • Начало
  • » GUI
  • » PyQt4. Пинаем QPaint из QThread. Уперся в 60 fps :-([RSS Feed]

Board footer

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

Powered by DjangoBB

Lo-Fi Version