python - 圆形图像作为按钮 PyQt5
问题描述
我正在尝试创建一个带有图像的圆形按钮。到目前为止,我已经能够创建一个圆形按钮和一个带有图像背景的按钮,但我无法将两者结合起来。
这是我当前的代码:
import sys
import PyQt5.QtWidgets
class Window(PyQt5.QtWidgets.QMainWindow):
def __init__(self):
super().__init__()
# setting title
self.setWindowTitle("Python ")
# setting geometry
self.setGeometry(100, 100, 600, 400)
# calling method
self.UiComponents()
# showing all the widgets
self.show()
# method for widgets
def UiComponents(self):
button = PyQt5.QtWidgets.QPushButton("CLICK", self)
button.setGeometry(200, 150, 100, 100)
# Background img and circular
button.setStyleSheet('''border-radius : 5;
border : 2px solid black
background-image : url(image.png);
''')
# adding action to a button
button.clicked.connect(self.clickme)
# action method
def clickme(self):
print("pressed")
App = PyQt5.QtWidgets.QApplication(sys.argv)
window = Window()
sys.exit(App.exec())
解决方案
Qt 文档有一个关于这个主题的部分:
在设置 QPushButton 的样式时,通常希望使用图像作为按钮图形。尝试使用 background-image 属性很常见,但这有很多缺点:例如,背景通常会隐藏在按钮装饰后面,因为它不被视为背景。此外,如果调整按钮的大小,整个背景将被拉伸或平铺,这并不总是很好看。
最好使用border-image 属性,因为无论背景如何,它都会始终显示图像(如果其中包含alpha值,您可以将其与背景结合起来),并且它具有处理按钮大小调整的特殊设置.
因此,您必须确保您使用的是正方形(不是矩形)图像,其边缘有圆形边距,并使用border-image
代替background-image
(如果图像小于按钮大小,则平铺图像);请注意,您不应在样式表中设置任何边框。
button.setStyleSheet('''
border-image: url(image.png);
''')
您显然需要始终对按钮的高度和宽度使用相同的值,可能通过使用setFixedSize()
,否则如果您将按钮添加到布局中,它将不再是圆形的。
推荐阅读
- ios - 如何在 Swift 中实现这种圆形视图
- python - Python 修改 csv 文件,复制和格式化列,并保存输出
- python - Discord.py - 如何使“客户端”变量支持“消息”?
- arrays - 在 Postgresql 中提取 jsonb - 同一 jsonb 字段中的字典和数组结构
- visual-studio-code - 在 Webview [vscode-extensions] 的外部 html 文件中加载外部 js
- spring - 基本 GET 请求失败 Angular 和 Spring
- javascript - 将对象解构为数组?
- c# - UWP:未指定的错误 - 来自 HRESULT 的异常:0x80004005
- c# - unity左右滑动bug
- c# - VSTO 加载项 C# 在任务窗格中添加可点击的超链接到文本