PyQt5 - 如何在“按钮”小部件中添加图像? | (不是图标)
Posted
技术标签:
【中文标题】PyQt5 - 如何在“按钮”小部件中添加图像? | (不是图标)【英文标题】:PyQt5 - How can I add image in 'pushbutton' widget? | (not icon) 【发布时间】:2021-07-08 09:14:04 【问题描述】:是否有在 PushButton 小部件中添加图像的功能或选项?在这种情况下,添加的图像是指作为背景应用到整个小部件的图像,而不是作为“图标”的图像。我试图找到这个选项并使用“setStyleSheet”功能,但它不起作用。有什么问题,如何在按钮中添加图像?
btn6.setStyleSheet(
"color: black;"
"border-style: solid;"
"border-width: 2px;"
"border-color: #FFB400;"
"border-radius: 3px;"
"background-color: #FFD732;"
"**background-image: url('D:\PyQt5_Tutorial\Test.png')")**
【问题讨论】:
有多种可能,但是:按钮是否还应该显示文本?应该根据按钮的大小调整图像的大小吗?如果是这样,它应该保持其纵横比吗?按钮边框是否应该像其他按钮一样显示?而且,最重要的是,“它不起作用”是什么意思?请注意,如果您使用上面的确切字符串,则路径错误有两个原因:单个反斜杠被视为转义,因此它们应该是\`, then in Qt you need to use standard slashes for paths instead (
D:/PyQt5...`) 但更重要的是,您应该始终使用相对路径。
顺便说一句,如果您想突出显示一段代码,请不要通过使用额外的字符来实现。很难理解您的代码是否真的正确(据我们所知,这可能只是一个错字)。使用 cmets,或仅指出您在问题正文中所指的行。
【参考方案1】:
您可以为此覆盖QPushButton.paintEvent()
。并且不要忘记添加交互性以反映按钮的不同状态:凹陷、禁用、鼠标悬停、输入焦点。
from PyQt5 import QtWidgets, QtGui
class Button(QtWidgets.QPushButton):
def __init__(self, parent = None) -> None:
super().__init__(parent)
self._image = None
def setImage(self, image):
self._image = image
self.update()
class Button(QtWidgets.QPushButton):
def __init__(self, parent = None) -> None:
super().__init__(parent)
self._image = None
def setImage(self, image):
self._image = image
self.update()
def paintEvent(self, event):
if self._image is None:
return
opt = QtWidgets.QStyleOptionButton()
self.initStyleOption(opt)
rect = self.rect()
painter = QtGui.QPainter(self)
self.style().drawControl(QtWidgets.QStyle.CE_PushButtonBevel, opt, painter, self)
if opt.state & QtWidgets.QStyle.State_Sunken:
rect.adjust(2,2,2,2)
painter.drawImage(rect, self._image)
if opt.state & QtWidgets.QStyle.State_MouseOver:
color = self.palette().color(QtGui.QPalette.Highlight)
color.setAlpha(50)
painter.fillRect(self.rect(), color)
if __name__ == "__main__":
app = QtWidgets.QApplication([])
button = Button()
button.setImage(QtGui.QImage("D:\\PyQt5_Tutorial\\Test.png"))
button.show()
app.exec()
【讨论】:
哦...!谢谢你的好意回答。我解决了这个问题。非常感谢!以上是关于PyQt5 - 如何在“按钮”小部件中添加图像? | (不是图标)的主要内容,如果未能解决你的问题,请参考以下文章