LINUX.ORG.RU

pygtk3 и обновление слайдера...

 , ,


0

1

Собственно сделал стрим плеер, впилил туда слайдер:

self.slider_update_signal_id = self.slider.connect(
            "value-changed", self.on_slider_changed)
В качестве стримера использую vlc (python-vlc), при изменении слайдера соответсвенно мотаем трек
def on_slider_changed(self, range):
        length = self.slider.get_value()
        self.player.set_position(length / 100.0)
Но теперь столкнулся с такой бедой, мне ведь нужно еще и слайдер обновлять до той позиции, на котором стримится трек
Пробовал довольно примитивно:

GObject.timeout_add(200, self.timing) # вызов после начала проигрывания плеера

и метод:

def timing(self):
        length = self.player.get_position()
        self.slider.set_value(length * 100.0)
        return True
Кто уже понял, при обновлении слайдера, перематывает трек, и все это начинает заикаться, каким образом можно это грамотно сделать?

UPD: Еще пробовал с потоками:

thread = threading.Thread(target=self.timing)
thread.daemon = True
thread.start()
В методе self.timing стояло while True со слипом (и без, лол)

★★★

Последнее исправление: noname_user (всего исправлений: 1)
Ответ на: комментарий от pawnhearts

Погуглил немного, не совсем понял как именно засунуть то что мне нужно в объект и заблокировать его. Не мог бы ты сэмпл скинуть?

noname_user ★★★
() автор топика
Ответ на: комментарий от noname_user
def timing(self):
        length = self.player.get_position()
        self.slider.handler_block(self.slider_update_signal_id)
        self.slider.set_value(length * 100.0)
        self.slider.handler_unblock(self.slider_update_signal_id)
        return True
pawnhearts ★★★★★
()
Ответ на: комментарий от pawnhearts

Сработало, благодарю! Теперь немного вник в эти хандлеры)

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