如何在使用 PyQt5 打开新文件时隐藏当前文件 window

How do I hide current window while opening a new one using PyQt5

我已将另一个文件链接到主 window 中的按钮。每次我单击它时,新的 window 都会打开,但旧的(主要的 window)仍然存在。如何在不影响新 window.

的情况下关闭或隐藏它

PS: 我是新来的。对我发布此查询时的任何愚蠢或错误表示歉意。谢谢!

相关代码如下:

    import sys  
    from PyQt5 import QtCore, QtGui, QtWidgets  
    from create2 import Ui_MainWindow  
    from PyQt5.QtWidgets import QMainWindow, QWidget  
    from PyQt5.QtCore import QMargins  

    class Ui_Form(object):  
        def setupUi(self, Form):  
            Form.setObjectName("Form")  
            Form.resize(813, 655)  
            self.widget = QtWidgets.QWidget(Form)  
            self.widget.setGeometry(QtCore.QRect(190, 50, 501, 591))  
            self.widget.setObjectName("widget")  
            .  
            .  
            .  
        def newusr_clk(self):  
            self.mainwin=QMainWindow()  
            self.ui=Ui_MainWindow()  
            self.ui.setupUi(self.mainwin)  
            self.mainwin.show() 

这是一个完整的工作示例。主要的 window 只是一个 QMainWindow。它将在单击按钮时打开 QDialog。他们的 ui 定义:

# file ui_main.py
from PyQt5 import QtCore, QtWidgets

class Ui_MainWindow:
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(442, 205)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(180, 80, 75, 23))
        self.pushButton.setObjectName("pushButton")
        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.pushButton.setText(_translate("MainWindow", "PushButton"))

#file ui_dialog.py
from PyQt5 import QtCore, QtWidgets

class Ui_Dialog:
    def setupUi(self, Dialog):
        Dialog.setObjectName("Dialog")
        Dialog.resize(508, 300)
        self.buttonBox = QtWidgets.QDialogButtonBox(Dialog)
        self.buttonBox.setGeometry(QtCore.QRect(150, 250, 341, 32))
        self.buttonBox.setOrientation(QtCore.Qt.Horizontal)
        self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.Cancel|QtWidgets.QDialogButtonBox.Ok)
        self.buttonBox.setObjectName("buttonBox")
        self.buttonBox.accepted.connect(Dialog.accept)
        self.buttonBox.rejected.connect(Dialog.reject)
        QtCore.QMetaObject.connectSlotsByName(Dialog)

在另一个文件中,定义 MainWindowPreferenceDialog classes:

# file main.py
from PyQt5.QtWidgets import QMainWindow, QApplication, QDialog

from ui_dialog import Ui_Dialog
from ui_main import Ui_MainWindow

class MainWindow(QMainWindow):

    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)

        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)

        self.ui.pushButton.clicked.connect(self.newusr_clk)

newuser_clk 插槽将隐藏 MainWindow 并通过 dialog.exec() 打开一个新的 QDialog 框。当QDialog关闭时,MainWindow再次显示。

    def newusr_clk(self):
        self.hide()
        dialog = PreferencesDialog(parent=self)
        if dialog.exec():
            pass # do stuff on success
        self.show()

这里是 PreferenceDialog class:

class PreferencesDialog(QDialog):
    def __init__(self, parent=None):
        super(PreferencesDialog, self).__init__(parent)

        self.ui = Ui_Dialog()
        self.ui.setupUi(self)

下面是 运行 脚本的方法:

if __name__ == '__main__':
    import sys

    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec_())

希望对您有所帮助!

所以我终于想出了如何在打开一个新的时隐藏当前的 window。这是我的代码(因为我使用的是表格):

if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    Form = QtWidgets.QWidget()
    ui = Ui_Form()
    ui.setupUi(Form)
    Form.show()
    sys.exit(app.exec_())

所以我用这个命令隐藏了当前window:

Form.setVisible(False)

这是隐藏当前 window 并打开新 window

的简单方法
class placeOrder(object):
    def __init__(self, Form):
       Form.setObjectName("Form")
       Form.setGeometry(0, 40, 1250, 650)
       self.orderWindow = Form

    def newWindow(self):
       from newWindow import newWindow
       self.windowNew = QtWidgets.QMainWindow()
       self.newWindowObj=newWindow(self.windowNew)
       self.orderWindow.hide()
       self.windowNew.show()

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