Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 1, 2015 14:52:30

hvppydvddy
Зарегистрирован: 2015-05-26
Сообщения: 36
Репутация: +  0  -
Профиль   Отправить e-mail  

ProgressBar и Timer

vrabey
Если не получится, напиши. И если получиться тоже напиши)

Офлайн

#2 Июнь 1, 2015 15:41:28

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2757
Репутация: +  184  -
Профиль   Отправить e-mail  

ProgressBar и Timer

Зачем вам временная шкала? Задача легко решается при помощи 2-х таймеров:

from PyQt4 import QtGui
from PyQt4 import QtCore
import sys
import random
class X(QtGui.QMainWindow):
	def __init__(self):
		QtGui.QMainWindow.__init__(self)
		self.progressBar = QtGui.QProgressBar(self)
		self.randemTimer = QtCore.QTimer(self)
		self.connect(self.randemTimer, QtCore.SIGNAL("timeout()"), self.restartTimer)
		self.randemTimer.start(1000)
		self.startProgressTimer(1000)
	def restartTimer(self):
		value = random.randint(100, 10000)
		self.randemTimer.setInterval(value)
		self.startProgressTimer(value)
		print value
	
	def startProgressTimer(self, timerValue):
		timer = QtCore.QTimer(self.progressBar)
		self.progressBar.setValue(0)
		def setValue():
			value = self.progressBar.value()+1
			if value < self.progressBar.maximum():
				self.progressBar.setValue(value)
			else:
				timer.stop()
				self.progressBar.setValue(0)
		self.progressBar.connect(timer, QtCore.SIGNAL("timeout()"), setValue)
		timer.start(timerValue/self.progressBar.maximum())
if __name__ == "__main__":
	app = QtGui.QApplication(sys.argv)
	Win = X()
	Win.show()
	sys.exit(app.exec_())



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Отредактировано Rodegast (Июнь 1, 2015 15:42:42)

Офлайн

#3 Июнь 1, 2015 17:22:24

hvppydvddy
Зарегистрирован: 2015-05-26
Сообщения: 36
Репутация: +  0  -
Профиль   Отправить e-mail  

ProgressBar и Timer

Rodegast
Задача легко решается при помощи 2-х таймеров
Да у не легче чем с QLineTime
self.timer.frameChanged.connect(self.progressBar.setValue)

Офлайн

#4 Июнь 2, 2015 00:42:21

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9885
Репутация: +  853  -
Профиль   Отправить e-mail  

ProgressBar и Timer

Rodegast
Задача легко решается при помощи 2-х таймеров:
Я один насчитал. Просто он должен быть не встроенным, а с добавкой (унаследованным от встроенного).



Отредактировано py.user.next (Июнь 2, 2015 00:42:36)

Офлайн

#5 Июнь 2, 2015 10:35:57

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2757
Репутация: +  184  -
Профиль   Отправить e-mail  

ProgressBar и Timer

> Да у не легче чем с QLineTime
Просто QTimeLine (класса QLineTime не существует) обычно используют для другого.

> Я один насчитал.
1) self.randemTimer = QtCore.QTimer(self)
2) timer = QtCore.QTimer(self.progressBar)

> Просто он должен быть не встроенным, а с добавкой (унаследованным от встроенного).
Я не знаю что такое встроенный таймер, но у меня и без лишнего наследования всё неплохо работает.



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#6 Июнь 2, 2015 11:42:25

hvppydvddy
Зарегистрирован: 2015-05-26
Сообщения: 36
Репутация: +  0  -
Профиль   Отправить e-mail  

ProgressBar и Timer

Rodegast
Просто QTimeLine (класса QLineTime не существует) обычно используют для другого.
А какое у него дефолтное назначение?

Офлайн

#7 Июнь 2, 2015 11:43:32

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9885
Репутация: +  853  -
Профиль   Отправить e-mail  

ProgressBar и Timer

Rodegast
Я не знаю что такое встроенный таймер
Встроенный - это QtCore.QTimer() (встроенный в Qt).
А с добавкой - это:
class Timer(QtCore.QTimer):
    timeout = None
    def __init__(self, seconds, parent=None):
        ...
Смысл в том, что ему нужен один таймер, за которым будет следить прогрессбар. Нужно только знать, какой интервал выбрать для таймера, чтобы весь прогрессбар равномерно заполнялся заданное количество секунд. Для этого в производном таймере секунды преобразуются в правильный интервал.

Rodegast
1) self.randemTimer = QtCore.QTimer(self)
Этот таймер зачем?



Отредактировано py.user.next (Июнь 2, 2015 11:47:05)

Офлайн

#8 Июнь 2, 2015 12:03:29

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2757
Репутация: +  184  -
Профиль   Отправить e-mail  

ProgressBar и Timer

> Встроенный - это QtCore.QTimer() (встроенный в Qt).
Вот так и надо писать - QTimer, а то может быть ты в виду имееш встроенный в виджет (timerEvent).

> Для этого в производном таймере секунды преобразуются в правильный интервал.
Зачем тебе для этого отдельный класс делать?

> Этот таймер зачем?
Это имитация таймера из устовия задачи.

> А какое у него дефолтное назначение?
Обычно используется для анимации.



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Отредактировано Rodegast (Июнь 2, 2015 12:18:15)

Офлайн

#9 Июнь 2, 2015 16:20:10

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9885
Репутация: +  853  -
Профиль   Отправить e-mail  

ProgressBar и Timer

Rodegast
Зачем тебе для этого отдельный класс делать?
А как, например, установить заполнение прогрессбара в течение 5 минут и 25 секунд? У него и start() можно сделать без аргумента.

timer = HMSTimer(0, 5, 25)
timer.start()
timer.stop()



Отредактировано py.user.next (Июнь 2, 2015 16:20:47)

Офлайн

#10 Июнь 2, 2015 17:59:25

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2757
Репутация: +  184  -
Профиль   Отправить e-mail  

ProgressBar и Timer

> А как, например, установить заполнение прогрессбара в течение 5 минут и 25 секунд?

1) Переводим всё это в миллисекунды (5*60+25)*1000
2) Передаём их в метод self.startProgressTimer(325000)
Если нужны другие подробности, то смотри мой пример.



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version