Как закруглить края кнопки, которая не имеет рамки и полностью состоит из изображения?(Python3, PyQt5)
Я сделал кнопку с картинкой с помощью модуля PyQt5. В таблице стиля убрал рамку, и теперь кнопка состоит только из картинки.
Теперь я хочу скруглить края у этой кнопки. Пожалуйста, подскажите, как это сделать?
from PyQt5 import QtWidgets, QtGui, QtCore
import sys
app = QtWidgets.QApplication(sys.argv)
window = QtWidgets.QWidget()
button = QtWidgets.QPushButton()
button.setStyleSheet('''QPushButton {
border: none;
margin: 0px;
padding: 0px;
}''')
button.setIcon(QtGui.QIcon('picture1.png'))
button.setIconSize(QtCore.QSize(140, 140))
box = QtWidgets.QHBoxLayout()
box.addWidget(button)
window.setLayout(box)
window.show()
sys.exit(app.exec_())
Ответы (1 шт):
Автор решения: S. Nick
→ Ссылка
Как вариант, через кликабельную QLabel
import sys
from PyQt5.Qt import *
class Label(QLabel):
clicked = pyqtSignal()
def __init__(self, *args, antialiasing=True, **kwargs):
super(Label, self).__init__(*args, **kwargs)
self.Antialiasing = antialiasing
self.setMaximumSize(140, 140)
self.setMinimumSize(140, 140)
self.radius = 70
self.target = QPixmap(self.size())
self.target.fill(Qt.transparent)
p = QPixmap("head2.jpg").scaled(
140, 140, Qt.KeepAspectRatioByExpanding, Qt.SmoothTransformation)
painter = QPainter(self.target)
if self.Antialiasing:
painter.setRenderHint(QPainter.Antialiasing, True)
painter.setRenderHint(QPainter.HighQualityAntialiasing, True)
painter.setRenderHint(QPainter.SmoothPixmapTransform, True)
path = QPainterPath()
path.addRoundedRect(
0, 0, self.width(), self.height(), self.radius, self.radius)
painter.setClipPath(path)
painter.drawPixmap(0, 0, p)
self.setPixmap(self.target)
def mouseReleaseEvent(self, event):
self.clicked.emit()
class Window(QWidget):
def __init__(self, *args, **kwargs):
super(Window, self).__init__(*args, **kwargs)
self.label = Label(self)
self.label.clicked.connect(self.onClicked)
layout = QHBoxLayout(self)
layout.addWidget(self.label)
self.setStyleSheet("background: green;")
def onClicked(self):
print('Вы сделали клил')
if __name__ == "__main__":
app = QApplication(sys.argv)
w = Window()
w.resize(400, 400)
w.show()
sys.exit(app.exec_())
