【问题标题】:PyQt5 MainWindow - Hide Windows BorderPyQt5 MainWindow - 隐藏窗口边框
【发布时间】:2020-09-09 12:23:55
【问题描述】:

您好,目前我的程序如下所示

我希望它看起来像这样

这是我的代码:

from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(1000, 690)
        MainWindow.setMinimumSize(QtCore.QSize(1000, 690))
        MainWindow.setMaximumSize(QtCore.QSize(1000, 690))
        MainWindow.setStyleSheet("")
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.verticalLayout = QtWidgets.QVBoxLayout(self.centralwidget)
        self.verticalLayout.setObjectName("verticalLayout")
        self.program_frame = QtWidgets.QFrame(self.centralwidget)
        font = QtGui.QFont()
        font.setFamily("Microsoft YaHei UI")
        self.program_frame.setFont(font)
        self.program_frame.setStyleSheet("border-radius: 10px;\n"
"background-color: rgb(33, 36, 41);")
        self.program_frame.setFrameShape(QtWidgets.QFrame.NoFrame)
        self.program_frame.setFrameShadow(QtWidgets.QFrame.Raised)
        self.program_frame.setObjectName("program_frame")
        self.program_side_frame = QtWidgets.QFrame(self.program_frame)
        self.program_side_frame.setGeometry(QtCore.QRect(680, 0, 301, 671))
        self.program_side_frame.setStyleSheet("background-color: rgb(39, 42, 47);")
        self.program_side_frame.setFrameShape(QtWidgets.QFrame.StyledPanel)
        self.program_side_frame.setFrameShadow(QtWidgets.QFrame.Raised)
        self.program_side_frame.setObjectName("program_side_frame")
        self.logged_in_frame = QtWidgets.QFrame(self.program_side_frame)
        self.logged_in_frame.setGeometry(QtCore.QRect(-1, 0, 301, 71))
        self.logged_in_frame.setStyleSheet("")
        self.logged_in_frame.setFrameShape(QtWidgets.QFrame.StyledPanel)
        self.logged_in_frame.setFrameShadow(QtWidgets.QFrame.Raised)
        self.logged_in_frame.setObjectName("logged_in_frame")
        self.label_username = QtWidgets.QLabel(self.logged_in_frame)
        self.label_username.setGeometry(QtCore.QRect(0, 15, 301, 16))
        font = QtGui.QFont()
        font.setFamily("Segoe UI Semibold")
        font.setPointSize(11)
        font.setBold(True)
        font.setWeight(75)
        self.label_username.setFont(font)
        self.label_username.setStyleSheet("color: rgb(247, 247, 248);\n"
"padding-right: 15px;\n"
"border:none;")
        self.label_username.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
        self.label_username.setObjectName("label_username")
        self.label_username_2 = QtWidgets.QLabel(self.logged_in_frame)
        self.label_username_2.setGeometry(QtCore.QRect(0, 40, 301, 16))
        font = QtGui.QFont()
        font.setFamily("Segoe UI Semibold")
        font.setPointSize(11)
        font.setBold(True)
        font.setWeight(75)
        self.label_username_2.setFont(font)
        self.label_username_2.setStyleSheet("color: rgb(152, 152, 153);\n"
"padding-right: 15px;\n"
"border: none;")
        self.label_username_2.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
        self.label_username_2.setObjectName("label_username_2")
        self.line = QtWidgets.QFrame(self.program_side_frame)
        self.line.setGeometry(QtCore.QRect(0, 70, 301, 1))
        self.line.setMinimumSize(QtCore.QSize(0, 0))
        self.line.setMaximumSize(QtCore.QSize(16777215, 1))
        self.line.setStyleSheet("background-color: rgb(90, 96, 102);")
        self.line.setFrameShape(QtWidgets.QFrame.HLine)
        self.line.setFrameShadow(QtWidgets.QFrame.Sunken)
        self.line.setObjectName("line")
        self.program_top_frame = QtWidgets.QFrame(self.program_frame)
        self.program_top_frame.setGeometry(QtCore.QRect(-1, 0, 681, 71))
        font = QtGui.QFont()
        font.setFamily("Segoe UI")
        font.setPointSize(12)
        self.program_top_frame.setFont(font)
        self.program_top_frame.setStyleSheet("")
        self.program_top_frame.setFrameShape(QtWidgets.QFrame.StyledPanel)
        self.program_top_frame.setFrameShadow(QtWidgets.QFrame.Raised)
        self.program_top_frame.setObjectName("program_top_frame")
        self.btn_maximize = QtWidgets.QPushButton(self.program_top_frame)
        self.btn_maximize.setGeometry(QtCore.QRect(610, 30, 21, 21))
        font = QtGui.QFont()
        font.setFamily("Segoe UI Semibold")
        font.setPointSize(10)
        font.setBold(True)
        font.setWeight(75)
        self.btn_maximize.setFont(font)
        self.btn_maximize.setStyleSheet("background-color: rgb(253, 66, 61);\n"
"border: 100%;")
        self.btn_maximize.setText("")
        self.btn_maximize.setObjectName("btn_maximize")
        self.btn_close = QtWidgets.QPushButton(self.program_top_frame)
        self.btn_close.setGeometry(QtCore.QRect(640, 30, 21, 21))
        font = QtGui.QFont()
        font.setFamily("Segoe UI Semibold")
        font.setPointSize(10)
        font.setBold(True)
        font.setWeight(75)
        self.btn_close.setFont(font)
        self.btn_close.setStyleSheet("border: 100%;\n"
"background-color: rgb(254, 187, 44);")
        self.btn_close.setText("")
        self.btn_close.setObjectName("btn_close")
        self.btn_minimize = QtWidgets.QPushButton(self.program_top_frame)
        self.btn_minimize.setGeometry(QtCore.QRect(580, 30, 21, 21))
        font = QtGui.QFont()
        font.setFamily("Segoe UI Semibold")
        font.setPointSize(10)
        font.setBold(True)
        font.setWeight(75)
        self.btn_minimize.setFont(font)
        self.btn_minimize.setStyleSheet("background-color: rgb(255, 255, 255);\n"
"border: 100%;")
        self.btn_minimize.setText("")
        self.btn_minimize.setObjectName("btn_minimize")
        self.home_btn = QtWidgets.QPushButton(self.program_top_frame)
        self.home_btn.setGeometry(QtCore.QRect(80, 30, 60, 21))
        font = QtGui.QFont()
        font.setFamily("Segoe UI Semibold")
        font.setPointSize(12)
        font.setBold(True)
        font.setWeight(75)
        self.home_btn.setFont(font)
        self.home_btn.setStyleSheet("color: rgb(253, 66, 61);")
        self.home_btn.setObjectName("home_btn")
        self.selectShoe_btn = QtWidgets.QPushButton(self.program_top_frame)
        self.selectShoe_btn.setGeometry(QtCore.QRect(160, 30, 71, 21))
        font = QtGui.QFont()
        font.setFamily("Segoe UI Semibold")
        font.setPointSize(12)
        font.setBold(True)
        font.setWeight(75)
        self.selectShoe_btn.setFont(font)
        self.selectShoe_btn.setStyleSheet("color: rgb(172, 172, 174);")
        self.selectShoe_btn.setObjectName("selectShoe_btn")
        self.startCopping_btn = QtWidgets.QPushButton(self.program_top_frame)
        self.startCopping_btn.setGeometry(QtCore.QRect(250, 30, 71, 21))
        font = QtGui.QFont()
        font.setFamily("Segoe UI Semibold")
        font.setPointSize(12)
        font.setBold(True)
        font.setWeight(75)
        self.startCopping_btn.setFont(font)
        self.startCopping_btn.setStyleSheet("color: rgb(172, 172, 174);")
        self.startCopping_btn.setObjectName("startCopping_btn")
        self.frame = QtWidgets.QFrame(self.program_frame)
        self.frame.setGeometry(QtCore.QRect(0, 70, 681, 601))
        self.frame.setStyleSheet("\n"
"border-bottom-right-radius: 0px;\n"
"border-top-right-radius: 0px;\n"
"border-top-left-radius: 0px;")
        self.frame.setFrameShape(QtWidgets.QFrame.StyledPanel)
        self.frame.setFrameShadow(QtWidgets.QFrame.Raised)
        self.frame.setObjectName("frame")
        self.label = QtWidgets.QLabel(self.frame)
        self.label.setGeometry(QtCore.QRect(20, 20, 151, 41))
        font = QtGui.QFont()
        font.setFamily("Segoe UI Semibold")
        font.setPointSize(18)
        font.setBold(True)
        font.setWeight(75)
        self.label.setFont(font)
        self.label.setStyleSheet("color: rgb(255, 255, 255);")
        self.label.setObjectName("label")
        self.verticalLayout.addWidget(self.program_frame)
        MainWindow.setCentralWidget(self.centralwidget)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.label_username.setText(_translate("MainWindow", "@administrator"))
        self.label_username_2.setText(_translate("MainWindow", "Subscriber"))
        self.home_btn.setText(_translate("MainWindow", "Home"))
        self.selectShoe_btn.setText(_translate("MainWindow", "Settings"))
        self.startCopping_btn.setText(_translate("MainWindow", "Help"))
        self.label.setText(_translate("MainWindow", "Home Screen"))


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

我几乎在所有地方都用谷歌搜索过,但我找到的答案似乎主要是针对 PyQt4。

我设法找到一个关于隐藏标题栏的答案,代码如下所示

self.setWindowFlag(Qt.FramelessWindowHint)

但这并没有得到我想要的结果。我得到的只是标题栏消失了,但我的程序仍然有一个灰色的矩形背景。

【问题讨论】:

    标签: python pyqt5


    【解决方案1】:

    白色边框是布局的内部边距,所以只需使用 setContentsMargins,对于圆形边框,您必须使用遮罩,显然还有 Qt::FramelessWindowHint 标志:

    from PyQt5.QtCore import QRect, Qt
    from PyQt5.QtGui import QRegion
    from PyQt5.QtWidgets import QApplication, QMainWindow
    
    from design import Ui_MainWindow
    
    
    class MainWindow(QMainWindow, Ui_MainWindow):
        def __init__(self, parent=None):
            super().__init__(parent)
            self.setupUi(self)
    
            self.verticalLayout.setContentsMargins(0, 0, 0, 0)
            self.setWindowFlag(Qt.FramelessWindowHint)
    
            radius = 10
            base = self.rect()
            ellipse = QRect(0, 0, 2 * radius , 2 * radius)
    
            base_region = QRegion(base.adjusted(radius, 0, -radius, 0))
            base_region |= QRegion(base.adjusted(0, radius, 0, -radius))
            
            base_region |= QRegion(ellipse, QRegion.Ellipse)
            ellipse.moveTopRight(base.topRight())
            base_region |= QRegion(ellipse, QRegion.Ellipse)
            ellipse.moveBottomRight(base.bottomRight())
            base_region |= QRegion(ellipse, QRegion.Ellipse)
            ellipse.moveBottomLeft(base.bottomLeft())
            base_region |= QRegion(ellipse, QRegion.Ellipse)
    
            self.setMask(base_region)
    
    
    if __name__ == "__main__":
        import sys
        app = QApplication(sys.argv)
        w = MainWindow()
        w.show()
        sys.exit(app.exec_())
    

    输出:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-01
      • 2021-12-27
      • 2021-12-19
      相关资源
      最近更新 更多