关闭窗口并使用PyQt在Python中打开一个新窗口

关闭窗口并使用PyQt在Python中打开一个新窗口,python,pyqt,qt4,qt5,Python,Pyqt,Qt4,Qt5,我是PyQt5新手,想编写一个小程序 我在QT设计器中设计了两个窗口,并将它们转换成py脚本。 之后,我将两者合并到一个文件中,可能我的尝试完全错误-所以请纠正我 当程序启动时,我会看到一个带有一些单选按钮的小窗口,以及OK和Cancel 我想通过单击OK启动另一个窗口。这个很好用 我的问题是,初始窗口在后台保持活动状态。如何仅关闭初始窗口?我所有的尝试都结束了整个程序。我不知道我要改变什么 import sys from PyQt5 import QtCore, QtGui, QtWidget

我是PyQt5新手,想编写一个小程序

我在QT设计器中设计了两个窗口,并将它们转换成py脚本。 之后,我将两者合并到一个文件中,可能我的尝试完全错误-所以请纠正我

当程序启动时,我会看到一个带有一些单选按钮的小窗口,以及OK和Cancel

我想通过单击OK启动另一个窗口。这个很好用 我的问题是,初始窗口在后台保持活动状态。如何仅关闭初始窗口?我所有的尝试都结束了整个程序。我不知道我要改变什么

import sys
from PyQt5 import QtCore, QtGui, QtWidgets


class CLASS_WELCOME(object):
    def setupUi(self, Welcome):
        Welcome.setObjectName("Welcome")
        Welcome.resize(204, 215)
        Welcome.setWindowTitle("Welcome")
        Welcome.setWhatsThis("")
        self.buttonBox = QtWidgets.QDialogButtonBox(Welcome)
        self.buttonBox.setGeometry(QtCore.QRect(0, 180, 191, 32))
        self.buttonBox.setOrientation(QtCore.Qt.Horizontal)
        self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.Cancel|QtWidgets.QDialogButtonBox.Ok)
        self.buttonBox.setObjectName("buttonBox")
        self.frame = QtWidgets.QFrame(Welcome)
        self.frame.setGeometry(QtCore.QRect(20, 40, 151, 131))
        self.frame.setFrameShape(QtWidgets.QFrame.StyledPanel)
        self.frame.setFrameShadow(QtWidgets.QFrame.Raised)
        self.frame.setObjectName("frame")
        self.radioButton = QtWidgets.QRadioButton(self.frame)
        self.radioButton.setGeometry(QtCore.QRect(10, 10, 116, 22))
        self.radioButton.setObjectName("radioButton")
        self.radioButton_2 = QtWidgets.QRadioButton(self.frame)
        self.radioButton_2.setGeometry(QtCore.QRect(10, 40, 116, 22))
        self.radioButton_2.setObjectName("radioButton_2")
        self.radioButton_3 = QtWidgets.QRadioButton(self.frame)
        self.radioButton_3.setGeometry(QtCore.QRect(10, 70, 116, 22))
        self.radioButton_3.setObjectName("radioButton_3")
        self.radioButton_4 = QtWidgets.QRadioButton(self.frame)
        self.radioButton_4.setGeometry(QtCore.QRect(10, 100, 116, 22))
        self.radioButton_4.setObjectName("radioButton_4")
        self.label = QtWidgets.QLabel(Welcome)
        self.label.setGeometry(QtCore.QRect(10, 10, 191, 17))
        font = QtGui.QFont()
        font.setBold(True)
        font.setWeight(75)
        self.label.setFont(font)
        self.label.setObjectName("label")

        self.retranslateUi(Welcome)
        self.buttonBox.accepted.connect(self.onOK)
        self.buttonBox.rejected.connect(Welcome.reject)
        QtCore.QMetaObject.connectSlotsByName(Welcome)
        self.Gui = CLASS_GUI()


    def retranslateUi(self, Welcome):
        _translate = QtCore.QCoreApplication.translate
        self.radioButton.setText(_translate("Welcome", "blue"))
        self.radioButton_2.setText(_translate("Welcome", "green"))
        self.radioButton_3.setText(_translate("Welcome", "red"))
        self.radioButton_4.setText(_translate("Welcome", "yellow"))
        self.label.setText(_translate("Welcome", "Mensch aergere dich nicht!"))

    def onOK(self):
        MenschUi = QtWidgets.QDialog()
        MenschUi.ui = CLASS_GUI()
        MenschUi.ui.setupUi(MenschUi)
        MenschUi.exec_()



class CLASS_GUI(object):
    def setupUi(self, MenschUi):
        MenschUi.setObjectName("MenschUi")
        MenschUi.resize(640, 485)
        self.Abbrechen = QtWidgets.QDialogButtonBox(MenschUi)
        self.Abbrechen.setGeometry(QtCore.QRect(290, 450, 341, 32))
        self.Abbrechen.setOrientation(QtCore.Qt.Horizontal)
        self.Abbrechen.setStandardButtons(QtWidgets.QDialogButtonBox.Cancel)
        self.Abbrechen.setCenterButtons(False)
        self.Abbrechen.setObjectName("Abbrechen")
        self.frame = QtWidgets.QFrame(MenschUi)
        self.frame.setGeometry(QtCore.QRect(100, 10, 531, 431))
        self.frame.setFrameShape(QtWidgets.QFrame.StyledPanel)
        self.frame.setFrameShadow(QtWidgets.QFrame.Raised)
        self.frame.setObjectName("frame")
        self.Spieler = QtWidgets.QLabel(MenschUi)
        self.Spieler.setGeometry(QtCore.QRect(10, 20, 66, 17))
        self.Spieler.setObjectName("Spieler")
        self.Computer = QtWidgets.QLabel(MenschUi)
        self.Computer.setGeometry(QtCore.QRect(10, 100, 66, 17))
        self.Computer.setObjectName("Computer")
        self.LCDSpieler = QtWidgets.QLCDNumber(MenschUi)
        self.LCDSpieler.setGeometry(QtCore.QRect(20, 40, 21, 23))
        self.LCDSpieler.setDigitCount(1)
        self.LCDSpieler.setObjectName("LCDSpieler")
        self.LCDComputer = QtWidgets.QLCDNumber(MenschUi)
        self.LCDComputer.setGeometry(QtCore.QRect(20, 130, 21, 23))
        self.LCDComputer.setDigitCount(1)
        self.LCDComputer.setObjectName("LCDComputer")
        self.wuerfeln = QtWidgets.QPushButton(MenschUi)
        self.wuerfeln.setGeometry(QtCore.QRect(10, 70, 81, 27))
        self.wuerfeln.setObjectName("wuerfeln")
        self.label = QtWidgets.QLabel(MenschUi)
        self.label.setGeometry(QtCore.QRect(10, 450, 491, 21))
        self.label.setText("")
        self.label.setObjectName("label")

        self.retranslateUi(MenschUi)
        self.Abbrechen.accepted.connect(MenschUi.accept)
        self.Abbrechen.rejected.connect(MenschUi.reject)
        self.wuerfeln.clicked.connect(MenschUi.open)
        QtCore.QMetaObject.connectSlotsByName(MenschUi)

    def retranslateUi(self, MenschUi):
        _translate = QtCore.QCoreApplication.translate
        MenschUi.setWindowTitle(_translate("MenschUi", "Mensch Aergere dich Nicht!"))
        self.Spieler.setText(_translate("MenschUi", "Spieler"))
        self.Computer.setText(_translate("MenschUi", "Computer"))
        self.wuerfeln.setText(_translate("MenschUi", "wuerfeln"))


if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    Welcome = QtWidgets.QDialog()
    ui = CLASS_WELCOME()
    ui.setupUi(Welcome)
    Welcome.show()
    sys.exit(app.exec_())

可能在方法的开头调用self.hide onOK就可以完成这项工作。未经测试
您可以查找一些方法。

合并pyuic生成的文件可能会导致重复。您决不能编辑这些文件。有关如何正确操作的示例,请参阅。我使用self.hide对其进行了测试,但这也隐藏了OP示例中无法执行self.hide的第二个窗口,因为self不是小部件。@JosefGschwentner。在第一个窗口上调用hide或close是正确的做法。但是,只有当第二个窗口是顶级的,即没有父窗口时,它才能正常工作。