亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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

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

查看完整回答
反對 回復 2022-12-06
  • 1 回答
  • 0 關注
  • 156 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號