繁体   English   中英

如何在 pyqt5 中获得无框 window?

[英]How get a frameless window in pyqt5?

我是 PyQt5 的新手,我很难弄清楚如何相应地转换代码以使其无框。 我使用了标志,但它一直给我一个错误,即“UI_MainWindow object 没有属性'SetWindowFlags'。问题出在执行部分,但我无法弄清楚如何进行更改。

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'MainScreen.UI'
#
# Created by: PyQt5 UI code generator 5.15.2
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again.  Do not edit this file unless you know what you are doing.


from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QApplication, QVBoxLayout, QSizeGrip
import sys


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(688, 525)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.verticalLayout = QtWidgets.QVBoxLayout(self.centralwidget)
        self.verticalLayout.setContentsMargins(0, 0, 0, 0)
        self.verticalLayout.setSpacing(0)
        self.verticalLayout.setObjectName("verticalLayout")
        self.Header = QtWidgets.QFrame(self.centralwidget)
        self.Header.setMaximumSize(QtCore.QSize(16777215, 50))
        self.Header.setStyleSheet("background-color: rgb(239, 128, 0);")
        self.Header.setFrameShape(QtWidgets.QFrame.WinPanel)
        self.Header.setFrameShadow(QtWidgets.QFrame.Raised)
        self.Header.setObjectName("Header")
        self.horizontalLayout_2 = QtWidgets.QHBoxLayout(self.Header)
        self.horizontalLayout_2.setContentsMargins(0, 0, 0, 0)
        self.horizontalLayout_2.setSpacing(0)
        self.horizontalLayout_2.setObjectName("horizontalLayout_2")
        self.Title_bar_container = QtWidgets.QFrame(self.Header)
        self.Title_bar_container.setStyleSheet("background-color: rgb(239, 133, 0);")
        self.Title_bar_container.setFrameShape(QtWidgets.QFrame.StyledPanel)
        self.Title_bar_container.setFrameShadow(QtWidgets.QFrame.Raised)
        self.Title_bar_container.setObjectName("Title_bar_container")
        self.Slider = QtWidgets.QFrame(self.Title_bar_container)
        self.Slider.setGeometry(QtCore.QRect(0, 0, 71, 52))
        self.Slider.setStyleSheet("background-color: rgb(239, 133, 0);")
        self.Slider.setFrameShape(QtWidgets.QFrame.NoFrame)
        self.Slider.setFrameShadow(QtWidgets.QFrame.Raised)
        self.Slider.setObjectName("Slider")
        self.horizontalLayout_4 = QtWidgets.QHBoxLayout(self.Slider)
        self.horizontalLayout_4.setContentsMargins(0, 0, 0, 0)
        self.horizontalLayout_4.setSpacing(0)
        self.horizontalLayout_4.setObjectName("horizontalLayout_4")
        self.pushButton_4 = QtWidgets.QPushButton(self.Slider)
        self.pushButton_4.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor))
        self.pushButton_4.setStyleSheet("\n"
"QPushButton{\n"
"background-color: rgb(239, 133, 0);\n"
"border:none;\n"
"}\n"
"\n"
"QPushButton::hover{\n"
"    \n"
"    background-color: rgb(243, 164, 50);\n"
"}")
        self.pushButton_4.setText("")
        icon = QtGui.QIcon()
        icon.addPixmap(QtGui.QPixmap(":/icon_pics/png/004-list.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.pushButton_4.setIcon(icon)
        self.pushButton_4.setIconSize(QtCore.QSize(24, 24))
        self.pushButton_4.setObjectName("pushButton_4")
        self.horizontalLayout_4.addWidget(self.pushButton_4)
        self.horizontalLayout_2.addWidget(self.Title_bar_container)
        self.Top_right_buttons = QtWidgets.QFrame(self.Header)
        self.Top_right_buttons.setMaximumSize(QtCore.QSize(100, 16777215))
        self.Top_right_buttons.setStyleSheet("background-color: rgb(239, 133, 0);")
        self.Top_right_buttons.setFrameShape(QtWidgets.QFrame.StyledPanel)
        self.Top_right_buttons.setFrameShadow(QtWidgets.QFrame.Raised)
        self.Top_right_buttons.setObjectName("Top_right_buttons")
        self.horizontalLayout_3 = QtWidgets.QHBoxLayout(self.Top_right_buttons)
        self.horizontalLayout_3.setContentsMargins(0, 0, 0, 0)
        self.horizontalLayout_3.setSpacing(0)
        self.horizontalLayout_3.setObjectName("horizontalLayout_3")
        self.pushButton = QtWidgets.QPushButton(self.Top_right_buttons)
        self.pushButton.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor))
        self.pushButton.setMouseTracking(False)
        self.pushButton.setWhatsThis("")
        self.pushButton.setStyleSheet("\n"
"QPushButton{\n"
"background-color: rgb(239, 133, 0);\n"
"border:none;\n"
"}\n"
"\n"
"QPushButton::hover{\n"
"    \n"
"    background-color: rgb(243, 164, 50);\n"
"}")
        self.pushButton.setText("")
        icon1 = QtGui.QIcon()
        icon1.addPixmap(QtGui.QPixmap(":/icon_pics/png/001-minimize.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.pushButton.setIcon(icon1)
        self.pushButton.setIconSize(QtCore.QSize(24, 24))
        self.pushButton.setFlat(False)
        self.pushButton.setObjectName("pushButton")
        self.horizontalLayout_3.addWidget(self.pushButton)
        self.pushButton_2 = QtWidgets.QPushButton(self.Top_right_buttons)
        self.pushButton_2.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor))
        self.pushButton_2.setStyleSheet("background-color: rgb(239, 133, 0);\n"
"border:none;\n"
"\n"
"QPushButton::hover{\n"
"    \n"
"    background-color: rgb(243, 164, 50);\n"
"}")
        self.pushButton_2.setText("")
        icon2 = QtGui.QIcon()
        icon2.addPixmap(QtGui.QPixmap(":/icon_pics/png/003-expand.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.pushButton_2.setIcon(icon2)
        self.pushButton_2.setIconSize(QtCore.QSize(24, 24))
        self.pushButton_2.setObjectName("pushButton_2")
        self.horizontalLayout_3.addWidget(self.pushButton_2)
        self.pushButton_3 = QtWidgets.QPushButton(self.Top_right_buttons)
        self.pushButton_3.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor))
        self.pushButton_3.setStyleSheet("\n"
"QPushButton{\n"
"background-color: rgb(239, 133, 0);\n"
"border:none;\n"
"}\n"
"\n"
"QPushButton::hover{\n"
"    \n"
"    background-color: rgb(243, 164, 50);\n"
"}")
        self.pushButton_3.setText("")
        icon3 = QtGui.QIcon()
        icon3.addPixmap(QtGui.QPixmap(":/icon_pics/png/002-remove.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.pushButton_3.setIcon(icon3)
        self.pushButton_3.setIconSize(QtCore.QSize(24, 24))
        self.pushButton_3.setObjectName("pushButton_3")
        self.horizontalLayout_3.addWidget(self.pushButton_3)
        self.horizontalLayout_2.addWidget(self.Top_right_buttons)
        self.verticalLayout.addWidget(self.Header)
        self.Main_body = QtWidgets.QFrame(self.centralwidget)
        self.Main_body.setStyleSheet("background-color: rgb(0, 0, 127);")
        self.Main_body.setFrameShape(QtWidgets.QFrame.NoFrame)
        self.Main_body.setFrameShadow(QtWidgets.QFrame.Raised)
        self.Main_body.setObjectName("Main_body")
        self.horizontalLayout = QtWidgets.QHBoxLayout(self.Main_body)
        self.horizontalLayout.setContentsMargins(0, 0, 0, 0)
        self.horizontalLayout.setSpacing(0)
        self.horizontalLayout.setObjectName("horizontalLayout")
        self.Left_side_menu = QtWidgets.QFrame(self.Main_body)
        self.Left_side_menu.setMaximumSize(QtCore.QSize(70, 16777215))
        self.Left_side_menu.setStyleSheet("background-color: rgb(239, 128, 0);\n"
"background-color: rgb(243, 164, 50);")
        self.Left_side_menu.setFrameShape(QtWidgets.QFrame.NoFrame)
        self.Left_side_menu.setFrameShadow(QtWidgets.QFrame.Raised)
        self.Left_side_menu.setObjectName("Left_side_menu")
        self.horizontalLayout.addWidget(self.Left_side_menu)
        self.Main_screen = QtWidgets.QFrame(self.Main_body)
        self.Main_screen.setStyleSheet("background-color: rgb(239, 128, 0);\n"
"background-color: rgb(243, 164, 50);")
        self.Main_screen.setFrameShape(QtWidgets.QFrame.NoFrame)
        self.Main_screen.setFrameShadow(QtWidgets.QFrame.Raised)
        self.Main_screen.setObjectName("Main_screen")
        self.horizontalLayout.addWidget(self.Main_screen)
        self.Right_side_menu = QtWidgets.QFrame(self.Main_body)
        self.Right_side_menu.setMaximumSize(QtCore.QSize(70, 16777215))
        self.Right_side_menu.setStyleSheet("background-color: rgb(239, 128, 0);\n"
"background-color: rgb(243, 164, 50);")
        self.Right_side_menu.setFrameShape(QtWidgets.QFrame.NoFrame)
        self.Right_side_menu.setFrameShadow(QtWidgets.QFrame.Raised)
        self.Right_side_menu.setObjectName("Right_side_menu")
        self.horizontalLayout.addWidget(self.Right_side_menu)
        self.verticalLayout.addWidget(self.Main_body)
        self.Footer = QtWidgets.QFrame(self.centralwidget)
        self.Footer.setMaximumSize(QtCore.QSize(16777215, 50))
        self.Footer.setStyleSheet("background-color: rgb(239, 128, 0);\n"
"background-color: rgb(243, 164, 50);")
        self.Footer.setFrameShape(QtWidgets.QFrame.NoFrame)
        self.Footer.setFrameShadow(QtWidgets.QFrame.Raised)
        self.Footer.setObjectName("Footer")
        self.verticalLayout.addWidget(self.Footer)
        MainWindow.setCentralWidget(self.centralwidget)

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

        flags = QtCore.Qt.WindowFlags(QtCore.Qt.FramelessWindowHint | QtCore.Qt.WindowStaysOnTopHint)
        self.setWindowFlags(flags)


    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
import Icons_rc


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

问题来自您试图编辑一个不打算修改的文件(正如 header 中的警告所说)。

setWindowFlags是 QWidget 类的 function。 这里使用的self指的是Ui_MainWindow实例,它是一个简单的 python object (“表单类”)。

从理论上讲,您可以将 function 用于setupUiMainWindow参数(这一个 QWidget 子类,因此它实现了该功能):

    MainWindow.setWindowFlags(flags)

但不是。 不。
编辑这些文件被认为是不好的做法,并且在不知道自己在做什么(或为什么)的情况下尝试这样做总是会导致误解、意外行为和错误,就像在您的情况下一样,没有考虑到每当您需要更改时然后你不得不痛苦地将新的 ui 文件与现有代码合并到 ui 中。

使用 pyuic 重新生成该文件,并保持原样 然后创建一个脚本,这将是您的实际程序脚本,并对这些文件执行唯一预期的操作:导入它。

from PyQt5 import QtWidgets
from file_generated_by_pyuic import Ui_MainWindow

class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
    def __init__(self):
        super().__init__()
        self.setupUi(self)
        self.setWindowFlags(
            self.windowFlags() | 
            QtCore.Qt.FramelessWindowHint | 
            QtCore.Qt.WindowStaysOnTopHint
        )


if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    # note the lower case "mainWindow", indicating it's an *instance*
    mainWindow = MainWindow()
    mainWindow.show()
    sys.exit(app.exec_())

在上面的示例中,暗示您使用 pyuic 创建了一个名为file_generated_by_pyuic.py的文件。

在有关使用 Designer的官方指南中阅读有关此主题的更多信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM