为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

HUH函数 2022-12-06 17:28:06
我想制作圆形的 PyQt5 应用程序。是这样的:我用 qtDesigner 创建了一个基本布局来测试。它包含一个 QFrame(名为“mainFrame”),我用样式表制作了一个圆形。我对 mainWindow 进行了同样的尝试...但是,我不知道如何让空的 mainWindow 不可见。我使窗口无框,改变了它的不透明度 - 但它影响了 mainWindow 内的所有内容基本测试应用程序:代码: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 以及其中的所有内容?
查看完整描述

1 回答

?
泛舟湖上清波郎朗

TA贡献1818条经验 获得超3个赞

QRegion::QRegion(const QRect &r, QRegion::RegionType t = 矩形)

这是一个过载功能。

基于区域类型为 t 的矩形 r 创建一个区域。

如果矩形无效,将创建一个空区域。


QWidget::setMask(const QRegion ®ion)

这是一个过载功能。

仅使与区域重叠的小部件部分可见。如果该区域包含小部件的 rect() 之外的像素,则该区域中的窗口系统控件可能可见也可能不可见,具体取决于平台。

请注意,如果区域特别复杂,此效果可能会很慢。

from PyQt5 import QtCore, QtGui, QtWidgets

from PyQt5.QtGui import QRegion



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)

        


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_())

//img1.sycdn.imooc.com//638f0b630001690d06570461.jpg

查看完整回答
反对 回复 2022-12-06
  • 1 回答
  • 0 关注
  • 117 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信