how code a Image button in PyQt?

后端 未结 5 810
误落风尘
误落风尘 2020-12-13 07:44

Im trying to do simple audio player, but I want use a image(icon) as a pushbutton.

5条回答
  •  孤街浪徒
    2020-12-13 08:15

    You can subclass QAbstractButton and make a button of your own. Here is a basic simple example:

    import sys
    from PyQt4.QtGui import *
    
    class PicButton(QAbstractButton):
        def __init__(self, pixmap, parent=None):
            super(PicButton, self).__init__(parent)
            self.pixmap = pixmap
    
        def paintEvent(self, event):
            painter = QPainter(self)
            painter.drawPixmap(event.rect(), self.pixmap)
    
        def sizeHint(self):
            return self.pixmap.size()
    
    app = QApplication(sys.argv)
    window = QWidget()
    layout = QHBoxLayout(window)
    
    button = PicButton(QPixmap("image.png"))
    layout.addWidget(button)
    
    window.show()
    sys.exit(app.exec_())
    

    That's not a super easy way, but it gives you a lot of control. You can add second pixmap and draw it only when the mouse pointer is hover over button. You can change current stretching behavior to the centering one. You can make it to have not a rectangular shape and so on...

    Button that changes images on mouse hover and when pressed:

    from PyQt4.QtGui import *
    from PyQt4.QtCore import *
    
    class PicButton(QAbstractButton):
        def __init__(self, pixmap, pixmap_hover, pixmap_pressed, parent=None):
            super(PicButton, self).__init__(parent)
            self.pixmap = pixmap
            self.pixmap_hover = pixmap_hover
            self.pixmap_pressed = pixmap_pressed
    
            self.pressed.connect(self.update)
            self.released.connect(self.update)
    
        def paintEvent(self, event):
            pix = self.pixmap_hover if self.underMouse() else self.pixmap
            if self.isDown():
                pix = self.pixmap_pressed
    
            painter = QPainter(self)
            painter.drawPixmap(event.rect(), pix)
    
        def enterEvent(self, event):
            self.update()
    
        def leaveEvent(self, event):
            self.update()
    
        def sizeHint(self):
            return QSize(200, 200)
    

提交回复
热议问题