LINUX.ORG.RU

PyQt4 и таймеры

 , ,


0

1

Значит, есть метод из двух частей — первая запускает таймер и периодически вызывает другой метод, вторая (вызывается по клавише) — останавливает таймер.

Так вот, таймер никак не получается остановить.

вот код:

def timer_method(self, stop): # stop предполагает логический тип
    timer=QtCore.QTimer(self)
    if not stop:
        self.connect(timer,
                     QtCore.SIGNAL('timeout()'),
                     self,
                     QtCore.SLOT('my_slot()'))
        timer.start(500)
    else:
        QtCore.qDebug("stop")
        self.disconnect(timer,
                        QtCore.SIGNAL('timeout()'),
                        self,
                        QtCore.SLOT('my_slot()'))
        timer.stop()

сообщение «stop» выводится, но слот при этом все равно продолжает регулярно вызываться. Аналогичная конструкция на C++ работает корректно

Ох, питон. :(

Я не вижу проверки результата функции disconnect(), что нехорошо. Если влом захламлять код осмысленными проверками, повесь хоть заглушку.

pathfinder ★★★★
()

А то, что при каждом вызове этой функции создается новый таймер, это так и должно быть? Что-то я сомневаюсь. Вы же пытаетесь остановить уже другой таймер.

baldman88
()

Ну и неплохо сначала таймер остановить, а уже потом дисконектить.

baldman88
()
Ответ на: комментарий от baldman88

А то, что при каждом вызове этой функции создается новый таймер, это так и должно быть? Что-то я сомневаюсь. Вы же пытаетесь остановить уже другой таймер.

Верно! Чел каждый раз создает новый таймер а выключает другой - и хочет чтоб всё работало =)))

I-Love-Microsoft ★★★★★
()

Аналогичная конструкция на C++ работает корректно

А можно такой «рабочий» пример на С++? Просто интересно.

baldman88
()
Ответ на: комментарий от baldman88
    QTimer *timer=new QTimer()
    if(!stop) {
        this->connect(timer,
                     SIGNAL('timeout()'),
                     this,
                     SLOT('my_slot()'))
        timer->start(500)
    } else {
        qDebug("stop")
        this->disconnect(timer,
                        SIGNAL('timeout()'),
                        this,
                        SLOT('my_slot()'))
        timer->stop()
    }
Daiquiri
() автор топика
Ответ на: комментарий от Daiquiri

Кхе кхе... Та же ошибка но на C++, не понимаю почему работает. А этот код где? Нужно больше, не вижу контекст.

I-Love-Microsoft ★★★★★
()
Последнее исправление: I-Love-Microsoft (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.