# -*- coding: utf-8 -*- from PyQt4.QtGui import * from PyQt4.QtCore import * import sys QTextCodec.setCodecForTr(QTextCodec.codecForName("utf8")) class KeyEvent(QWidget): def __init__(self,parent=None): super(KeyEvent,self).__init__(parent) self.setWindowTitle(self.tr("获得键盘事件")) self.pix = QPixmap(self) self.pix.load("image/butterfly.png") self.image = QImage("image/butterfly.png") self.width = 400 self.height = 300 self.step = 2 self.startX = 0 self.startY = 0 self.resize(self.width,self.height) def drawPix(self): self.pix.fill(Qt.white) painter = QPainter(self.pix) pen = QPen(Qt.DotLine) painter.setPen(pen) for i in xrange(self.step,self.width,self.step): painter.drawLine(QPoint(i,0),QPoint(i,self.height)) for j in xrange(self.step,self.height,self.step): painter.drawLine(QPoint(0,j),QPoint(self.width,j)) painter.drawImage(QPoint(self.startX,self.startY),self.image) def keyPressEvent(self,event): if event.modifiers() == Qt.ControlModifier: if event.key() == Qt.Key_Left: self.startX = self.startX - 1 < 0 and self.startX or self.startX - 1 if event.key() == Qt.Key_Right: self.startX = self.startX + 1 + self.image.width() > self.width and self.startX or self.startX + 1 if event.key() == Qt.Key_Up: self.startY = self.startY - 1 < 0 and self.startY or self.startY - 1 if event.key() == Qt.Key_Down: self.startY = self.startY + 1 + self.image.height() > self.height and self.startY or self.startY + 1 else: self.startX = self.startX - self.startX%self.step self.startY = self.startY - self.startY%self.step if event.key() == Qt.Key_Left: self.startX = self.startX - self.step < 0 and self.startX or self.startX - self.step if event.key() == Qt.Key_Right: self.startX = (self.startX + self.step + self.image.width() > self.width ) and self.startX or self.startX + self.step if event.key() == Qt.Key_Up: self.startY = (self.startY - self.step < 0) and self.startY or self.startY - self.step if event.key() == Qt.Key_Down: self.startY = (self.startY + self.step + self.image.height() > self.height) and self.startY or self.startY + self.step if event.key() == Qt.Key_Home: self.startX = 0 self.startY = 0 if event.key() == Qt.Key_End: self.startX = self.width - self.image.width() self.startY = self.height - self.image.height() self.drawPix() self.update() def paintEvent(self,event): painter = QPainter(self) painter.drawPixmap(QPoint(0,0),self.pix) app=QApplication(sys.argv) dialog=KeyEvent() dialog.show() app.exec_()