我想把PyQt5的app做成圆形。 像这样的东西:
我已经用qtDesigner创建了一个基本布局来测试。 它包含一个QFrame(名为“mainframe”),我用样式表循环了它。
我用MainWindow做了同样的尝试。。。 但是,我不知道如何使空的mainWindow不可见。
我使窗口无框,改变了它的不透明度-但它影响了主窗口内的所有内容
基础测试APP:
代码:
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)
我如何才能使圆形大型机出现,以及其中的每一个东西?
QRegion
::QRegion(常量QRect&R,QRegion::RegionType t=矩形)
这是一个重载的函数。
基于区域类型为T的矩形r创建一个区域。
如果矩形无效,将创建空区域。
QWidget
::setMask(常量QRegion&Region)
这是一个重载的函数。
使小工具中与区域重叠的部分仅可见。 如果该区域包括小部件的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_())