Python 如何在PyQt/PySide中绘制四周宽度相同的圆形矩形边框轮廓?

Python 如何在PyQt/PySide中绘制四周宽度相同的圆形矩形边框轮廓?,python,pyqt,pyqt4,pyqt5,pyside,Python,Pyqt,Pyqt4,Pyqt5,Pyside,事实上,我已经寻找这个答案有一段时间了,我以前也看到过其他帖子问过同样的问题,但我从来没有找到任何好的答案。 无论如何,如果您运行我的代码,您将看到4条边的边框比轮廓的其余部分更厚。周围有没有可能有一个均匀的边界 import sys from PySide2.QtCore import Qt from PySide2.QtGui import QPainter, QPen, QColor, QBrush from PySide2.QtWidgets import QWidget, QAppli

事实上,我已经寻找这个答案有一段时间了,我以前也看到过其他帖子问过同样的问题,但我从来没有找到任何好的答案。
无论如何,如果您运行我的代码,您将看到4条边的边框比轮廓的其余部分更厚。周围有没有可能有一个均匀的边界

import sys
from PySide2.QtCore import Qt
from PySide2.QtGui import QPainter, QPen, QColor, QBrush
from PySide2.QtWidgets import QWidget, QApplication

class MainWindow(QWidget):
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)
        self.setWindowFlags(Qt.FramelessWindowHint)
        self.setAttribute(Qt.WA_TranslucentBackground, True)

    def paintEvent(self, event):
        painter = QPainter(self)
        fillColor = QColor(255, 165, 0, 180)
        lineColor = QColor(0, 0, 0, 255)
        painter.setRenderHint(QPainter.Antialiasing)
        painter.setPen(QPen(QBrush(lineColor), 2))
        painter.setBrush(QBrush(fillColor))
        painter.drawRoundedRect(self.rect(), 15, 15)

if __name__ == '__main__':
    app = QApplication(sys.argv)
    w = MainWindow()
    w.show()
    app.exec_()
谢谢。

试试看:

import sys
from PyQt5.QtCore    import Qt,                              QRectF
from PyQt5.QtGui     import QPainter, QPen, QColor, QBrush,  QPainterPath
from PyQt5.QtWidgets import QWidget, QApplication

class MainWindow(QWidget):
    BorderColor     = QColor(0, 0, 0, 255)     
    BackgroundColor = QColor(255, 165, 0, 180) 

    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)
        self.setWindowFlags(Qt.FramelessWindowHint)          
        self.setAttribute(Qt.WA_TranslucentBackground, True) 

    def paintEvent(self, event):
        super(MainWindow, self).paintEvent(event) 

        painter = QPainter(self)
        painter.setRenderHint(QPainter.Antialiasing)   

        rectPath = QPainterPath()                      
        height = self.height() - 8                     
        rectPath.addRoundedRect(QRectF(2, 2, self.width()-4, height), 15, 15)
        painter.setPen(QPen(self.BorderColor, 2, Qt.SolidLine,
                                 Qt.RoundCap, Qt.RoundJoin))
        painter.setBrush(self.BackgroundColor)
        painter.drawPath(rectPath)
        painter.setPen(QPen(self.BackgroundColor, 2,
                                 Qt.SolidLine, Qt.RoundCap, Qt.RoundJoin))

if __name__ == '__main__':
    app = QApplication(sys.argv)
    w = MainWindow()
    w.show()
    app.exec_()