生成具有三态背景图片的按钮
class PussButton: # # 生成具有三态背景图片的按钮 # def init(self, *imgPath): from PyQt5.QtWidgets import QPushButton from PyQt5.QtGui import QPixmap length = len(imgPath) if length==3: nomalPath = imgPath[0] hoverPath = imgPath[1] pressedPath = imgPath[2] else: pressedPath=hoverPath=nomalPath = imgPath[0] pixmap_mask=QPixmap('./img/1.png') but = QPushButton('') print('pressedPath', pressedPath,imgPath ) #调整按钮的大小,使其和背景的大小一致 but.setFixedSize( pixmap_mask.width(), pixmap_mask.height() ) # 图片的三种状态 but.setStyleSheet("QPushButton{border-image:url("+nomalPath+");}" "QPushButton:hover{border-image:url("+hoverPath+");}" "QPushButton:pressed{border-image:url("+pressedPath+");}") # # 设置遮罩,如果不设置遮罩,PNG图片的空白部分也可以点击的 # but.setMask(pixmap_mask.createHeuristicMask()) return but def init2(self): from PyQt5.QtWidgets import QPushButton from PyQt5.QtGui import QPixmap, QIcon from PyQt5.QtCore import QSize pixmap_mask=QPixmap('./img/1.png') but = QPushButton('') but.setFixedSize( pixmap_mask.width(), pixmap_mask.height() ); but.setMask(pixmap_mask.createHeuristicMask()); icon = QIcon(pixmap_mask) but.setIcon(icon); but.setIconSize(QSize(pixmap_mask.width(),pixmap_mask.height())); but.setToolTip("hello") but.clicked.connect(self.print_click) return but def print_click(self): print('print_click') if __name__ == '__main__': import sys from PyQt5.QtWidgets import QApplication from PyQt5.QtWidgets import (QWidget, QLabel, QVBoxLayout) from PyQt5.QtCore import Qt from PyQt5.QtGui import QPixmap, QImage app = QApplication(sys.argv) ##################################################### main= QWidget() layout_main = QVBoxLayout() layout_main.setAlignment( Qt.AlignLeft ) main.setLayout(layout_main) label_top = QLabel() pixmap_top=QPixmap('./img/3.png') label_top.setPixmap(pixmap_top) layout_main.addWidget(label_top) tool = PussButton() paths = ['./img/1.png','./img/2.png','./img/3.png' ] but_3 = tool.init(*paths) layout_main.addWidget(but_3) but_4 =tool.init2() layout_main.addWidget(but_4) image = QImage("./img/2.png"); pixmap= QPixmap() pixmap.convertFromImage(image) label= QLabel() label.setPixmap(pixmap) main.show() ##################################################### sys.exit(app.exec_())