簡體   English   中英

PyQt5 MainWindow - 隱藏窗口邊框

[英]PyQt5 MainWindow - Hide Windows Border

嗨,目前我的程序看起來像這樣

在此處輸入圖片說明

我希望它看起來像這樣

在此處輸入圖片說明

這是我的代碼:

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)

但這並沒有得到我想要的結果。 我得到的只是標題欄消失了,但我的程序仍然有一個灰色的矩形背景。

該白色邊框是布局的內部邊距,因此只需使用 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_())

輸出:

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM