PyQt5:如何制作圆形应用程序?

我想制作圆形的 PyQt5 应用程序。是这样的:

http://img2.mukewang.com/638f0b3e00013df105150522.jpg

我用 qtDesigner 创建了一个基本布局来测试。它包含一个 QFrame(名为“mainFrame”),我用样式表制作了一个圆形。

我对 mainWindow 进行了同样的尝试...但是,我不知道如何让空的 mainWindow 不可见。

我使窗口无框,改变了它的不透明度 - 但它影响了 mainWindow 内的所有内容

基本测试应用程序:

http://img1.mukewang.com/638f0b49000125ea05860586.jpg

代码:


class Ui_Form(object):

    def setupUi(self, Form):

        Form.setObjectName("Form")

        Form.resize(500, 500)

        self.mainFrame = QtWidgets.QFrame(Form)

        self.mainFrame.setGeometry(QtCore.QRect(10, 10, 481, 481))

        self.mainFrame.setFrameShape(QtWidgets.QFrame.WinPanel)

        self.mainFrame.setObjectName("mainFrame")

        QtCore.QMetaObject.connectSlotsByName(Form)


        Form.setWindowFlags(QtCore.Qt.FramelessWindowHint | QtCore.Qt.WindowStaysOnTopHint)

        Form.setStyleSheet("QFrame#mainFrame {\n"

        "    border: 5px solid grey;\n"

        "    border-radius: 240px;\n"

        "    background-color: rgba(255, 0, 0, 50);\n"

        "}\n"

        "QWidget#Form {\n"

        "    background-color: rgba(255, 255, 255, 0);\n"

        "    border: 5px solid grey;\n"

        "    border-radius: 250px;\n"

        "}")

        self.mainFrame.mouseDoubleClickEvent = lambda event: QtWidgets.qApp.quit()

        # Form.setWindowOpacity(0.4)

        # self.mainFrame.setWindowOpacity(1)

我怎样才能只显示圆形的 mainFrame 以及其中的所有内容?


HUH函数
浏览 118回答 1
1回答

泛舟湖上清波郎朗

QRegion::QRegion(const QRect &r, QRegion::RegionType t = 矩形)这是一个过载功能。基于区域类型为 t 的矩形 r 创建一个区域。如果矩形无效,将创建一个空区域。QWidget::setMask(const QRegion ®ion)这是一个过载功能。仅使与区域重叠的小部件部分可见。如果该区域包含小部件的 rect() 之外的像素,则该区域中的窗口系统控件可能可见也可能不可见,具体取决于平台。请注意,如果区域特别复杂,此效果可能会很慢。from PyQt5 import QtCore, QtGui, QtWidgetsfrom PyQt5.QtGui import QRegionclass Ui_Form(object):    def setupUi(self, Form):        Form.setObjectName("Form")        Form.resize(500, 500)        self.mainFrame = QtWidgets.QFrame(Form)        self.mainFrame.setGeometry(QtCore.QRect(10, 10, 481, 481))        self.mainFrame.setFrameShape(QtWidgets.QFrame.WinPanel)        self.mainFrame.setObjectName("mainFrame")        QtCore.QMetaObject.connectSlotsByName(Form)        Form.setWindowFlags(QtCore.Qt.FramelessWindowHint | QtCore.Qt.WindowStaysOnTopHint)        Form.setStyleSheet("QFrame#mainFrame {\n"        "    border: 5px solid grey;\n"        "    border-radius: 240px;\n"        "    background-color: rgba(255, 0, 0, 50);\n"        "}\n"        "QWidget#Form {\n"        "    background-color: rgba(255, 255, 255, 0);\n"        "    border: 5px solid grey;\n"        "    border-radius: 250px;\n"        "}")        self.mainFrame.mouseDoubleClickEvent = lambda event: QtWidgets.qApp.quit()        # Form.setWindowOpacity(0.4)        # self.mainFrame.setWindowOpacity(1)        class MainWindow(QtWidgets.QWidget, Ui_Form):    def __init__(self):        super().__init__()                self.setupUi(self)        self.region_and_mask()    def region_and_mask(self):        my_region = QRegion(self.rect(), QRegion.Ellipse)        self.setMask(my_region)        if __name__ == '__main__':     import sys    app = QtWidgets.QApplication(sys.argv)    main = MainWindow()    main.show()    sys.exit(app.exec_())
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python