crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

6 страниц V  < 1 2 3 4 > »   
Ответить в данную темуНачать новую тему
> Торможения таймера при рисовании, Python
zuze
  опции профиля:
сообщение 4.4.2013, 10:45
Сообщение #11


Участник
**

Группа: Участник
Сообщений: 211
Регистрация: 4.11.2012
Пользователь №: 3589

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(lanz @ 4.4.2013, 10:37) *
Поэтому и задержка, т.е. реальное время где то 0,5 секунды и быстрее не получится.


1. Можно ли это как-то документально прочитать, про скорости таймера в Python?
2. А почему тогда в место 5 секунд обновляется, через каждые 3 секунды?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
lanz
  опции профиля:
сообщение 4.4.2013, 10:57
Сообщение #12


Старейший участник
****

Группа: Участник
Сообщений: 690
Регистрация: 28.12.2012
Пользователь №: 3660

Спасибо сказали: 113 раз(а)




Репутация:   8  


1. Таймер в Qt. Python только вызывает функции.
2. А как были посчитаны эти 3 секунды?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
zuze
  опции профиля:
сообщение 4.4.2013, 11:11
Сообщение #13


Участник
**

Группа: Участник
Сообщений: 211
Регистрация: 4.11.2012
Пользователь №: 3589

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(lanz @ 4.4.2013, 10:57) *
2. А как были посчитаны эти 3 секунды?


Я делал так

timer.start(5000)


А считал в уме. Решил проверинть на секундомере на смартфоне. В итоге первые несколько раз по 3 секунды, а потом идёт интервал по 5 секунд, даже немного поменше (4,7 или 4,8 секунды).
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
zuze
  опции профиля:
сообщение 5.4.2013, 13:46
Сообщение #14


Участник
**

Группа: Участник
Сообщений: 211
Регистрация: 4.11.2012
Пользователь №: 3589

Спасибо сказали: 0 раз(а)




Репутация:   0  


Как я понял, мой коде есть ряд ошибок:
1. Код не удовлетворяет модели "модель-представление-контроллер (Model-View-Controller, MVC)". Не совсем понимаю, как это сделать.
2. Я вызываю перерисовку всего окна по таймеру и жду следующей перерисовку от таймера. Наверно надо пересовывать, только следующий кусочек.
3. Возможно я не в той функции запускаю таймер.
4. В методе MyTimer ты в не зависимости от того активен self.checkBox или нет, проверяю phi на условие и в зависимости от результата меняю его.
Это я поправил, вот так:
def MyTimer(self):
        global phi
        global im1

        if self.ui.checkBox_4.isChecked():
            for j in range(0, 720, 1):
                for i in range(491, -1, -1):
                    im1.setPixel(j, i, QtGui.QColor(255, 0, 0, 255).rgba())

            self.update()

            if int(self.MyRadianToGradus(phi)+0.5)*720/360 < 720:
                phi += self.MyGradusToRadian(6.0)
            else:
                phi = self.MyGradusToRadian(6.0)


Помогите пожалуйста разобратся с ошибочками 1-3.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
lanz
  опции профиля:
сообщение 8.4.2013, 8:45
Сообщение #15


Старейший участник
****

Группа: Участник
Сообщений: 690
Регистрация: 28.12.2012
Пользователь №: 3660

Спасибо сказали: 113 раз(а)




Репутация:   8  


Цитата
Код не удовлетворяет модели "модель-представление-контроллер (Model-View-Controller, MVC)". Не совсем понимаю, как это сделать.

Это не ошибка сама по себе. Не любой код должен удовлетворять такой модели.
http://ru.wikipedia.org/wiki/Model-View-Controller

Цитата
Я вызываю перерисовку всего окна по таймеру и жду следующей перерисовку от таймера. Наверно надо пересовывать, только следующий кусочек.

Основные тормоза не от этого, а скорее всего, что картинка готовится каждый раз, когда надо ее вывести:
if self.ui.checkBox_4.isChecked():
            for j in range(0, 720, 1):
                for i in range(491, -1, -1):
                    im1.setPixel(j, i, QtGui.QColor(255, 0, 0, 255).rgba())

Этот код не зависит от phi, зачем он вызывается каждый раз при перерисовке?

Цитата
Возможно я не в той функции запускаю таймер.

Не вижу проблемы.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
zuze
  опции профиля:
сообщение 8.4.2013, 8:54
Сообщение #16


Участник
**

Группа: Участник
Сообщений: 211
Регистрация: 4.11.2012
Пользователь №: 3589

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(lanz @ 8.4.2013, 8:45) *
Основные тормоза не от этого, а скорее всего, что картинка готовится каждый раз, когда надо ее вывести:

if self.ui.checkBox_4.isChecked():
            for j in range(0, 720, 1):
                for i in range(491, -1, -1):
                    im1.setPixel(j, i, QtGui.QColor(255, 0, 0, 255).rgba())


Если дело в этом коде, то он необходим, так как тут подготавливаеться картинка, через каждый промежуток времени. А заранее подготовить нельзя, так как в будущем будет не один цвет, а много разных картинок, которые будут менятся по таймеру.

Не ужели для такой простой задачи в Python без потоков не обойтись?

На всякий случай прикрепляю два фала ld.py и ld.ui лежащих в архиве ld.zip. Возможно они помогут решить проблему с торможением.

Сообщение отредактировал zuze - 8.4.2013, 9:58
Прикрепленные файлы
Прикрепленный файл  ld.zip ( 1,35 килобайт ) Кол-во скачиваний: 191
 
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
zuze
  опции профиля:
сообщение 8.4.2013, 10:21
Сообщение #17


Участник
**

Группа: Участник
Сообщений: 211
Регистрация: 4.11.2012
Пользователь №: 3589

Спасибо сказали: 0 раз(а)




Репутация:   0  


Решил проверить время выполнения кода.

if self.ui.radioButton.isChecked():
            self.start = time.time()
            for j in range(0, 720, 1):
                for i in range(491, -1, -1):
                    im.setPixel(j, i, QtGui.QColor(255, 0, 0, 255).rgba())

            self.end = time.time()
            self.secs = self.end - self.start
            print self.secs  # миллисекунды


Какие-то странные результаты, хотя я поставил таймер 5000 миллисекунд.
А сами результаты такие:
0.836999893188
0.838999986649
0.837999820709
0.832000017166
0.836999893188

Сообщение отредактировал zuze - 8.4.2013, 10:21
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
lanz
  опции профиля:
сообщение 8.4.2013, 10:35
Сообщение #18


Старейший участник
****

Группа: Участник
Сообщений: 690
Регистрация: 28.12.2012
Пользователь №: 3660

Спасибо сказали: 113 раз(а)




Репутация:   8  


Все правильно, подготовка картинки занимает почти секунду.

Цитата
Если дело в этом коде, то он необходим, так как тут подготавливаеться картинка, через каждый промежуток времени.

Картинку необязательно готовить каждый кадр, можно ее готовить только когда возникнет необходимость в новой.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
zuze
  опции профиля:
сообщение 8.4.2013, 10:43
Сообщение #19


Участник
**

Группа: Участник
Сообщений: 211
Регистрация: 4.11.2012
Пользователь №: 3589

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(lanz @ 8.4.2013, 10:35) *
Картинку необязательно готовить каждый кадр, можно ее готовить только когда возникнет необходимость в новой.


У меня необходимость постоянная в выводе картинок. Сначала берутся значения из двоичного файла и рисуеться картинка, через определённый промежуток времени. Затем рисуется картинка из второго файла, а первая картинка, как бы затираеться. Затем рисуеться картинка из третьего файла, а вторая картинка, как бы затираеться.

Схема вывода картинок:

_______________________________
|-----------------------|------------------------|
|Первая картинка | Фон -----------------|
|-----------------------|------------------------|
_______________________________|

________________________________
|-----------------------|------------------------|
|Вторая картинка | Первая картинка |
|-----------------------|------------------------|
_______________________________|

_______________________________
|----------------------|-------------------------|
|Третья картинка | Вторая картинка |
|----------------------|------------------------|
______________________________|

и так далее.

Сообщение отредактировал zuze - 8.4.2013, 10:50
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
lanz
  опции профиля:
сообщение 8.4.2013, 10:51
Сообщение #20


Старейший участник
****

Группа: Участник
Сообщений: 690
Регистрация: 28.12.2012
Пользователь №: 3660

Спасибо сказали: 113 раз(а)




Репутация:   8  


Это все понятно, но картинка обновляется только когда начинает рисоваться новая, а не каждый шаг (по phi) отрисовки картинки.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

6 страниц V  < 1 2 3 4 > » 
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 25.11.2024, 4:15