如何在PyQt中编码图像按钮?
我想做一个简单的音频播放器,但我想用一个图片(图标)作为按钮。
6 个回答
5
你可以使用QToolButton,并把它的自动抬起属性设置为真,这样你就可以在上面设置你的图片了。
28
你可以通过继承QAbstractButton来制作自己的按钮。下面是一个简单的基本示例:
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_())
这虽然不是最简单的方法,但它能让你有更多的控制权。你可以添加第二个图像,并且只有当鼠标指针悬停在按钮上时才绘制它。你还可以改变按钮的拉伸方式,让它居中显示。你甚至可以让按钮的形状不是矩形,等等……
这个按钮在鼠标悬停和按下时会改变图像:
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)
4
我发现很多人都有这个问题,所以决定写一个详细的例子来教大家怎么解决。你可以在这里找到这个例子:如何让QLabel可点击的例子。 我在帖子中提供的解决方案是通过扩展QLabel,使它能够发出clicked()信号,从而解决这个问题。 扩展后的QLabel大概是这样的:
class ExtendedQLabel(QLabel):
def __init__(self, parent):
QLabel.__init__(self, parent)
def mouseReleaseEvent(self, ev):
self.emit(SIGNAL('clicked()'))
希望这对你有帮助!