Найти - Пользователи
Полная версия: ProgressBar и Timer
Начало » GUI » ProgressBar и Timer
1 2 3 4
hvppydvddy
vrabey
Если не получится, напиши. И если получиться тоже напиши)
Rodegast
Зачем вам временная шкала? Задача легко решается при помощи 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_())
hvppydvddy
Rodegast
Задача легко решается при помощи 2-х таймеров
Да у не легче чем с QLineTime
self.timer.frameChanged.connect(self.progressBar.setValue)
py.user.next
Rodegast
Задача легко решается при помощи 2-х таймеров:
Я один насчитал. Просто он должен быть не встроенным, а с добавкой (унаследованным от встроенного).
Rodegast
> Да у не легче чем с QLineTime
Просто QTimeLine (класса QLineTime не существует) обычно используют для другого.

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

> Просто он должен быть не встроенным, а с добавкой (унаследованным от встроенного).
Я не знаю что такое встроенный таймер, но у меня и без лишнего наследования всё неплохо работает.
hvppydvddy
Rodegast
Просто QTimeLine (класса QLineTime не существует) обычно используют для другого.
А какое у него дефолтное назначение?
py.user.next
Rodegast
Я не знаю что такое встроенный таймер
Встроенный - это QtCore.QTimer() (встроенный в Qt).
А с добавкой - это:
class Timer(QtCore.QTimer):
    timeout = None
    def __init__(self, seconds, parent=None):
        ...
Смысл в том, что ему нужен один таймер, за которым будет следить прогрессбар. Нужно только знать, какой интервал выбрать для таймера, чтобы весь прогрессбар равномерно заполнялся заданное количество секунд. Для этого в производном таймере секунды преобразуются в правильный интервал.

Rodegast
1) self.randemTimer = QtCore.QTimer(self)
Этот таймер зачем?
Rodegast
> Встроенный - это QtCore.QTimer() (встроенный в Qt).
Вот так и надо писать - QTimer, а то может быть ты в виду имееш встроенный в виджет (timerEvent).

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

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

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

timer = HMSTimer(0, 5, 25)
timer.start()
timer.stop()
Rodegast
> А как, например, установить заполнение прогрессбара в течение 5 минут и 25 секунд?

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