如何通过单击按钮关闭窗口并打开新窗口?

时间:2019-03-26 09:14:11

标签: python-3.x dialog pyqt5

我正在用PyQt5创建一个程序,并已将两个窗口的.py文件制作成。一个是登录窗口,另一个是mainWindow。要打开该程序,一个单独的程序main.py将调用logInWindow.py中的子例程来打开该窗口。有一个按钮,单击该按钮时应关闭登录窗口并通过调用来打开mainWindow.py。主窗口可以正常打开,但登录窗口不会关闭。我需要它,以便在mainWindow打开后关闭登录窗口。在mainWindow打开之前,期间或之后进行操作并不重要,只要它打开就可以了。由于程序的其他部分,我还需要能够将值从logInWindow传递到mainWindow。我已经对下面的代码做了简化。

我尝试使用QtWidgets.QDialog()。close()之类的东西(这些代码已被代码识别),但实际上并未执行任何操作。唯一关闭它的是sys.exit(),但是在打开mainWindow的行代码之前将整个关闭。

#main.py
import logInWindow

var1 = input("Start: ")
if var1 == 'y':
    logInWindow.openUp()
#logInWindow.py
from PyQt5 import QtCore, QtGui, QtWidgets
import sys
import mainWindow

class Ui_Dialog(object):
    def setupUi(self, Dialog):
        Dialog.setObjectName("Dialog")
        Dialog.resize(400, 135)
        self.pushButton = QtWidgets.QPushButton(Dialog)
        self.pushButton.setGeometry(QtCore.QRect(110, 50, 161, 32))
        self.pushButton.setBaseSize(QtCore.QSize(161, 32))
        self.pushButton.setObjectName("pushButton")
        self.pushButton.clicked.connect(self.buttonClick)

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

    def buttonClick(self):
        #code to close logInWindow here
        needsToBePassed = 'This is the main window.'
        mainWindow.openUp2(needsToBePassed)

    def retranslateUi(self, Dialog):
        _translate = QtCore.QCoreApplication.translate
        Dialog.setWindowTitle(_translate("Dialog", "logInWindow"))
        self.pushButton.setText(_translate("Dialog", "open mainWindow"))

def openUp():
    import sys
    app = QtWidgets.QApplication(sys.argv)
    Dialog = QtWidgets.QDialog()
    ui = Ui_Dialog()
    ui.setupUi(Dialog)
    Dialog.show()
    sys.exit(app.exec_())
#mainWindow.py
from PyQt5 import QtCore, QtGui, QtWidgets
import sys

def openUp2(passed):
    class Ui_Dialog(object):
        def setupUi(self, Dialog):
            Dialog.setObjectName("Dialog")
            Dialog.resize(400, 300)
            self.label = QtWidgets.QLabel(Dialog)
            self.label.setGeometry(QtCore.QRect(110, 130, 151, 16))
            self.label.setObjectName("label")

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

        def retranslateUi(self, Dialog):
            _translate = QtCore.QCoreApplication.translate
            Dialog.setWindowTitle(_translate("Dialog", "mainWindow"))
            self.label.setText(_translate("Dialog", passed))

    Dialog = QtWidgets.QDialog()
    ui = Ui_Dialog()
    ui.setupUi(Dialog)
    Dialog.exec_()

如果有人可以帮助我,那就太好了!另外,如果只是几行代码,而不是更改代码的工作方式,那会更好,但两者都可以。

0 个答案:

没有答案