【发布时间】:2011-02-12 06:04:36
【问题描述】:
我正在尝试做简单的音频播放器,但我想使用图像(图标)作为按钮。
【问题讨论】:
我正在尝试做简单的音频播放器,但我想使用图像(图标)作为按钮。
【问题讨论】:
您可以继承 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)
【讨论】:
pixmap_pressed 保留为图标,直到按下另一个按钮?现在,它仅在鼠标悬停或按下一会儿时才会改变,但它会恢复正常。我基本上想在具有几乎相同功能的浏览器上创建与活动选项卡相同的行为。
您可以将 QToolButton 与 set autoraise 属性一起使用,您也可以在那里设置您的图像。
【讨论】:
我看到很多人都有这个问题,并决定写一个适当的例子来说明如何解决它。你可以在这里找到它:An example on how to make QLabel clickable 我的帖子中的解决方案通过扩展 QLabel 使其发出 clicked() 信号来解决问题。 扩展的 QLabel 看起来像这样:
class ExtendedQLabel(QLabel):
def __init__(self, parent):
QLabel.__init__(self, parent)
def mouseReleaseEvent(self, ev):
self.emit(SIGNAL('clicked()'))
我希望这会有所帮助!
【讨论】:
可能是这样的吧?
import sys
from PyQt4.QtGui import *
from PyQt4.QtCore import *
app = QApplication(sys.argv)
widget = QWidget()
layout = QHBoxLayout()
widget.setLayout(layout)
button = QPushButton()
layout.addWidget(button)
icon = QIcon("image.png")
button.setIcon(icon)
widget.show()
app.exec_()
【讨论】:
另一种选择是使用样式表。比如:
from PyQt4 import QtCore, QtGui
import os
...
path = os.getcwd()
self.myButton.setStyleSheet("background-image: url(" + path + "/myImage.png);")
【讨论】: