生成具有三态背景图片的按钮

简介: 生成具有三态背景图片的按钮   class PussButton: # # 生成具有三态背景图片的按钮 # def init(self, *imgPath): from PyQt5.

 

生成具有三态背景图片的按钮

 

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_())

 

相关文章
|
4月前
|
前端开发 C++
css 鼠标悬浮显示放大图片 vs 鼠标点击显示放大图片
css 鼠标悬浮显示放大图片 vs 鼠标点击显示放大图片
51 0
|
小程序 JavaScript
小程序鼠标点击按钮(改变背景颜色字体)
小程序鼠标点击按钮(改变背景颜色字体)
99 0
|
6月前
|
前端开发
css样式实现一个滑动按钮
css样式实现一个滑动按钮
57 0
|
11月前
水波纹按钮动画
水波纹按钮动画
46 0
水波纹按钮动画
平铺文理+拉伸按钮图片
平铺文理+拉伸按钮图片
79 0
|
Java Android开发
两个按钮的滑块
牙叔教程 简单易懂
163 0
tabBar选中的颜色的设置
tabBar选中的颜色的设置
469 0
tabBar选中的颜色的设置
|
算法 JavaScript
weebox弹出窗口不居中显示?
weebox弹出窗口不居中显示?
111 0
|
JavaScript BI 数据库