网上有很多设置为无标题栏的方法,但都是基于全手写代码的,并没有针对Designer这个GUI工具的设置方法。
由于Designer生成的界面是继承自object类的,而网上的方法全是手写代码,并继承自QMainWindow类或QWidget类的,在Designer中并没有相关的设置项,改py文件的话,一旦重新生成界面,所做的工作全部白废,很不方便。
我的做法如下
1 Designer生成的界面为main_ui.ui,经过Uic工具转换以后的文件名为main_ui.py
2 新建一个display_ui.py,开头增加 from PyQt5.QtCore import Qt 这一行
3 从main_ui.ui中再继承一下,并增加设置无边框的方法
这样操作以后,Designer中的任何更改,以及再次生成界面文件,都不再影响功能的实现
代码如下:
文件名:main_ui.py
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_Form(object):
# def setNoTittle(self, Form):
# Form.setWindowFlags(Qt.FramelessWindowHint)
# pass
def setupUi(self, Form):
Form.setObjectName("Form")
Form.resize(800, 600)
# Form.setWindowFlags(Qt.FramelessWindowHint)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred)
sizePolicy.setHorizontalStretch(5)
sizePolicy.setVerticalStretch(5)
sizePolicy.setHeightForWidth(Form.sizePolicy().hasHeightForWidth())
Form.setSizePolicy(sizePolicy)
Form.setLayoutDirection(QtCore.Qt.LeftToRight)
self.retranslateUi(Form)
QtCore.QMetaObject.connectSlotsByName(Form)
def retranslateUi(self, Form):
_translate = QtCore.QCoreApplication.translate
Form.setWindowTitle(_translate("Form", "Form"))
from main_ui import *
from PyQt5.QtCore import Qt
# 从Designer生成的标准文件结构中的Ui_Form类继承,并增加一个设置方法setNoTittle,以设置为无标题栏
class Ui_Form_Additional(Ui_Form):
def setNoTittle(self, Form):
Form.setWindowFlags(Qt.FramelessWindowHint) # 设置为无标题栏
pass
if __name__ == "__main__":
import sys
from PyQt5.QtGui import QIcon
app=QtWidgets.QApplication(sys.argv)
widget=QtWidgets.QWidget()
ui=Ui_Form_Additional()
ui.setNoTittle(widget)
ui.setupUi(widget)
widget.show()
sys.exit(app.exec_())
self.setWindowFlags(Qt.Qt.FramelessWindowHint)