Найти - Пользователи
Полная версия: PyQt4. Пинаем QPaint из QThread. Уперся в 60 fps :-(
Начало » GUI » PyQt4. Пинаем QPaint из QThread. Уперся в 60 fps :-(
1
aaleksander
Доброго времени суток, уважаемые. Помогите прояснить ситуацию.

Только начал присматриваться к 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(). Если так, то что есть в питоне для точного измерения времения? Ничего не нашел.
Андрей Светлов
Есть подозрение, что у вас Windows.
Странная хотелка - заботится об FPS на отрисовке Qt
aaleksander
Да, под винды. Но дома стоит Убунту - тоже будет там работать.
Вообще, есть идея разработать небольшую,расширяемую ГИС.
У меня уже есть наработки. Но они написаны на Делфи. Сейчас начал разрабатывать редактор карт для системы. Можно загрузить подложку (отсканированную карту), создать полигоны, дороги разной толщины. Все это двигается, редактируется, масштабируется. Почти как Корел. Осталось только дома сделать.

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

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

Подскажите еще такую вещь. Насколько просто потом будет переползти c PyQt4 на PySide и стОит ли? Мало ли как обернется и захочется сделать коммерческий вариант :-)
Андрей Светлов
Сложностей не наблюдается, но пройтись с ручными правками по исходникам придется.
udav
Тогда уж подскажите и мне - существует ли стабильная версия PySide для Python31?
Андрей Светлов
Даже нестабильная не существует, насколько я знаю.
В их планах портирование на тройку должно быть после выхода первого официального релиза 1.0 (если, конечно, не найдется доброволец-энтузиаст).
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