pyqt5设置窗口圆角
时间: 2025-01-07 18:31:37 浏览: 90
### PyQt5 中实现窗口圆角效果
在 PyQt5 中,可以通过设置 `QWidget` 或其子类(如 `QMainWindow`, `QDialog` 等)的样式表来创建具有圆角效果的窗口。具体来说,可以利用 CSS 类似的样式表语法来定义窗口的外观特性。
对于整个窗口应用圆角边框的效果,通常需要处理窗口本身的绘制行为,因为默认情况下 Qt 的窗口框架不受样式表影响。一种常见做法是在自定义窗口类中重写 `paintEvent` 函数,并使用 `QRadialGradient` 或者简单的画笔操作来完成这一目标[^1]。
下面是一个通过继承 `QWidget` 并覆盖 `paintEvent` 来实现带有圆角的透明窗口的例子:
```python
import sys
from PyQt5.QtWidgets import QApplication, QWidget
from PyQt5.QtGui import QPainter, QColor, QBrush, QRadialGradient
from PyQt5.QtCore import Qt
class RoundedWindow(QWidget):
def __init__(self):
super().__init__()
# 设置无边框窗口标志位
self.setWindowFlags(Qt.FramelessWindowHint | Qt.WindowStaysOnTopHint)
# 设置背景透明度
self.setAttribute(Qt.WA_TranslucentBackground)
def paintEvent(self, event):
painter = QPainter(self)
brush = QBrush()
# 创建径向渐变并填充到刷子对象里
gradient = QRadialGradient(70, 80, 60)
gradient.setColorAt(0.0, QColor("#FFFFFF"))
gradient.setColorAt(1.0, QColor("#DDDDDD"))
brush.setStyle(Qt.SolidPattern)
brush.setTexture(QPixmap())
brush.setColor(QColor('#ffffff'))
brush.setGradient(gradient)
rect = self.rect()
painter.setRenderHints(QPainter.Antialiasing |
QPainter.HighQualityAntialiasing,
True)
painter.fillRect(rect, brush)
pen = painter.pen()
pen.setWidth(2)
pen.setColor(QColor('#aaaaaa'))
painter.setPen(pen)
painter.drawRoundedRect(rect, 20, 20)
if __name__ == '__main__':
app = QApplication(sys.argv)
window = RoundedWindow()
window.resize(300, 200)
window.show()
sys.exit(app.exec_())
```
此代码片段展示了如何构建一个拥有平滑边缘的圆形矩形区域作为应用程序主界面的基础构件。这里的关键在于调用了 `drawRoundedRect()` 方法指定了想要达到的圆角半径参数 (本例中为 20)。
另外,在某些场景下也可以考虑直接给顶层部件添加如下所示的样式声明以简化开发过程:
```css
/* 应用于顶级 widget */
MyCustomWidget {
border-radius: 10px;
background-color: rgba(255, 255, 255, 0);
}
```
需要注意的是这种方法可能不会总是有效取决于操作系统及其主题配置等因素的影响;因此更推荐采用上述基于绘画事件的方式来自定义窗口外形[^3]。
阅读全文
相关推荐















