我剛開始學習PyQT4。PyQT4和瓷磚動畫
如何定義一個類,其實例將是動畫圖像?我有幾個PNG文件,所以我希望這個對象能夠在一個時刻渲染一個這樣的文件,並在其他時刻渲染其他文件。我應該使用QMovie還是Qt動畫框架,還是什麼?謝謝!
我剛開始學習PyQT4。PyQT4和瓷磚動畫
如何定義一個類,其實例將是動畫圖像?我有幾個PNG文件,所以我希望這個對象能夠在一個時刻渲染一個這樣的文件,並在其他時刻渲染其他文件。我應該使用QMovie還是Qt動畫框架,還是什麼?謝謝!
其實,我發現的東西是更期望對我來說http://python.su/forum/topic/15679/?page=1#post-94136
# -*- coding: utf-8 -*-
import sys
import time
from PyQt4 import QtGui, QtCore
class SpriteAnimation(object):
def __init__(self, image_path, sprite_width, sprite_height, label):
pixmap = QtGui.QPixmap(image_path)
width, height = pixmap.width(), pixmap.height()
self.pixmaps = []
for x in range(0, width, sprite_width):
for y in range(0, height, sprite_height):
self.pixmaps.append(pixmap.copy(x, y,
sprite_width, sprite_height))
self._current_frame = 0
self.label = label
def play(self, interval=100):
self._timer = QtCore.QTimer(interval=interval,
timeout=self._animation_step)
self._timer.start()
def _animation_step(self):
self.label.setPixmap(self.pixmaps[self._current_frame])
self.label.update()
self._current_frame += 1
if self._current_frame >= len(self.pixmaps):
self._current_frame = 0
class Window(QtGui.QWidget):
def __init__(self, parent=None):
QtGui.QWidget.__init__(self, parent)
self.resize(100, 100)
layout = QtGui.QVBoxLayout(self)
label = QtGui.QLabel()
layout.addWidget(label)
# http://content.makeyourflashgame.com/pbe/tutorials/star-green.png
self.animation = SpriteAnimation('star-green.png', 80, 80, label)
self.animation.play()
if __name__ == '__main__':
app = QtGui.QApplication(sys.argv)
window = Window()
window.show()
sys.exit(app.exec_())
而且我用這個想法通過以下方式:
class PowerUp(QtGui.QGraphicsRectItem):
def __init__(self):
QtGui.QGraphicsRectItem.__init__(self)
self.images = ['data/images/objects/bonus_block/full-0.png',
'data/images/objects/bonus_block/full-1.png',
'data/images/objects/bonus_block/full-2.png',
'data/images/objects/bonus_block/full-3.png',
'data/images/objects/bonus_block/full-4.png']
self.image = self.images[0]
self.current = 0
self.position()
self.timer = QtCore.QTimer()
self.timer.timeout.connect(self.animation_step)
self.timer.start(175)
#random.choice([slide(), ghost()])
def position(self):
self.pos_x = random.randint(-300, 300)
self.pos_y = random.randint(-200, 200)
def boundingRect(self):
return QtCore.QRectF(0, 0, 32, 32)
def paint(self, painter, option, widget):
painter.setBrush(QtGui.QBrush(self.image))
painter.setPen(QtGui.QPen(QtCore.Qt.NoPen))
painter.drawRect(0, 0, 32, 32)
self.setPos(self.pos_x, self.pos_y)
def animation_step(self):
self.image = QtGui.QPixmap(self.images[self.current])
self.current += 1
if self.current == len(self.images):
self.current = 0
很高興你解決了你的問題。 – doru