为什么pyqt中当form2设为全屏后关闭显示黑屏?当我在form2中加入self.setWindowState(Qt.WindowFullScreen)代码后,调用form2的close()方法,form2关闭后黑屏?
main.py代码
from PyQt5.QtWidgets import QWidget,QApplication
from form1 import Form1
import sys
if __name__ == '__main__':
app = QApplication(sys.argv)
mainWin = Form1()
mainWin.show()
sys.exit(app.exec())
form1ui.py代码
rom PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow1(object):
def setupUi(self, MainWindow1):
MainWindow1.setObjectName("MainWindow1")
MainWindow1.resize(378, 162)
self.centralwidget = QtWidgets.QWidget(MainWindow1)
self.centralwidget.setObjectName("centralwidget")
self.pushButton = QtWidgets.QPushButton(self.centralwidget)
self.pushButton.setGeometry(QtCore.QRect(130, 40, 113, 32))
self.pushButton.setObjectName("pushButton")
MainWindow1.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow1)
self.menubar.setGeometry(QtCore.QRect(0, 0, 378, 22))
self.menubar.setObjectName("menubar")
MainWindow1.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow1)
self.statusbar.setObjectName("statusbar")
MainWindow1.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow1)
QtCore.QMetaObject.connectSlotsByName(MainWindow1)
def retranslateUi(self, MainWindow1):
_translate = QtCore.QCoreApplication.translate
MainWindow1.setWindowTitle(_translate("MainWindow1", "MainWindow"))
self.pushButton.setText(_translate("MainWindow1", "打开form2"))
form1.py代码
from PyQt5.QtWidgets import QMainWindow
from form1ui import Ui_MainWindow1
from form2 import Form2
class Form1(QMainWindow,Ui_MainWindow1):
def __init__(self):
super().__init__()
self.setupUi(self)
self.form2 = Form2()
self.pushButton.clicked.connect(self.showForm2)
def showForm2(self):
self.showMinimized()
self.form2.show()
form2ui.py代码
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow2(object):
def setupUi(self, MainWindow2):
MainWindow2.setObjectName("MainWindow2")
MainWindow2.resize(800, 600)
self.centralwidget = QtWidgets.QWidget(MainWindow2)
self.centralwidget.setObjectName("centralwidget")
self.pushButton = QtWidgets.QPushButton(self.centralwidget)
self.pushButton.setGeometry(QtCore.QRect(340, 360, 113, 32))
self.pushButton.setObjectName("pushButton")
MainWindow2.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow2)
self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 22))
self.menubar.setObjectName("menubar")
MainWindow2.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow2)
self.statusbar.setObjectName("statusbar")
MainWindow2.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow2)
QtCore.QMetaObject.connectSlotsByName(MainWindow2)
def retranslateUi(self, MainWindow2):
_translate = QtCore.QCoreApplication.translate
MainWindow2.setWindowTitle(_translate("MainWindow2", "MainWindow"))
self.pushButton.setText(_translate("MainWindow2", "关闭"))
form2.py代码
from PyQt5.QtWidgets import QMainWindow
from PyQt5.QtCore import Qt
from form2ui import Ui_MainWindow2
class Form2(QMainWindow,Ui_MainWindow2):
def __init__(self):
super().__init__()
self.setupUi(self)
self.setWindowState(Qt.WindowFullScreen)
self.pushButton.clicked.connect(self.closeWin)
def closeWin(self):
self.close()
不知道你这个问题是否已经解决, 如果还没有解决的话:问题描述: 我在使用pyqt编写程序时,在form2中使用了self.setWindowState(Qt.WindowFullScreen)设置全屏后,再调用close()关闭form2时,会出现黑屏的情况。我使用了main.py、form1ui.py、form1.py、form2ui.py、form2.py这些文件作为代码。请问如何解决这个问题?
解决方案: 这个问题可能是因为程序在窗口全屏时,没有正确地退出全屏模式,导致在关闭窗口时出现黑屏。您可以尝试在调用close()方法前,先将窗口恢复到正常模式,再关闭窗口。具体的代码实现如下:
# 在form2.py中重写closeEvent()方法
def closeEvent(self, event):
# 添加以下代码,将窗口恢复到正常模式
self.setWindowState(Qt.WindowNoState)
event.accept()
这个方法会在窗口关闭时被自动调用,它会将窗口恢复到正常模式,然后再关闭窗口。这样就可以避免出现黑屏的情况了。