1、图片按钮的实现

首先,重写一个QLabel的类,代码如下:
from PyQt4 import QtGui, QtCore
from PyQt4.QtGui import *

class labelBtn(QLabel):
   
    def __init__(self, parent, img1,  img2):
       
        super(labelBtn,self).__init__(parent)
       
        self.img1=img1
        self.img2=img2
        self.setPixmap(self.img1)
       
    def mousePressEvent(self, event):
        #if event.buttons()==QtCore.Qt.LeftButton:
        self.setPixmap(self.img2)
        self.emit(QtCore.SIGNAL("pressed()"))
    def mouseReleaseEvent(self, event):
        self.setPixmap(self.img1)
        self.emit(QtCore.SIGNAL("released()"))

注意:img1,img2 是两张不同的图片,默认显示img1,当按下后,再显示img2,松开后又显示img1,这样便实现了一个动态的效果
必须要加上:super(labelBtn,self).__init__(parent),否则会报错:
被调试的程序导致异常 unhandled RuntimeError
“underlying C/C++ object has been deleted”

然后,就可以自由的定义图片按钮了,例如,在另一个类里import它后:
定义一个按钮:
self.label2=labelBtn(self,QtGui.QPixmap('./mm1.png'), QtGui.QPixmap('./mm2.png'))
self.label2.setGeometry(QtCore.QRect(120, 70, 140, 140))
按下,松开时会分别发出:“pressed()“和“released()”信号,据此可添写自己需要的事件。