rodion
Апрель 18, 2010 22:17:51
Есть класс пронаследованый от QtGui.QFrame, мне необходимо перемещать, например, fillRect по этому фрейму. Я переопределил метод paintEvent, но во время перемещения fillRect он сначала перемещается(я этого не вижу), и только потом, когда перемещение завершается, отображается окно с фреймом и конечное положение fillRect , всех промежуточных положений не видно. Как исправить проблему, и нужно ли использовать update() и если да, то где?
Или по-другому: не могли бы Вы написать простую програмку в PyQt, которая перемещает какой-то графический обьект по окну?
Спасибо
rodion
Апрель 19, 2010 11:28:23
Все, разобрался, нужен был таймер)))))
Ну вот если кому-то надо
from PyQt4 import QtGui, QtCore
import sys
import time
class test(QtGui.QFrame):
def __init__(self):
QtGui.QFrame.__init__(self)
self.timer = QtCore.QBasicTimer()
self.timer.start(300, self)
def paintEvent(self, event): #переопределяем paintEvent
painter = QtGui.QPainter()
painter.begin(self)
self.drawFigure(painter) # вызываем отдельно написанный метод
painter.end()
def drawFigure(self, painter):
painter.fillRect(self.x,self.y,10,10, QtGui.QColor(0,0,0)) #рисуем сам квадратик черным цветом
def timerEvent(self, event):
if event.timerId() == self.timer.timerId():
self.nextStep() #в nextStep() увеличиваем координату y и апдейтим фрейм
else:
QtGui.QFrame.timerEvent(self, event)
def nextStep(self):
self.y+=10
self.update()
app = QtGui.QApplication(sys.argv)
Test = test()
Test.show()
sys.exit(app.exec_())