【问题标题】:Close Window and open a new one in Python with PyQt关闭窗口并使用 PyQt 在 Python 中打开一个新窗口
【发布时间】:2015-11-18 23:32:34
【问题描述】:

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

我在 QT Designer 中设计了两个 Windows 并将它们转换为 py 脚本。 之后我将两者合并到一个文件中(也许我的尝试完全错误 - 所以请纠正我)

当程序启动时,我会看到一个带有一些单选按钮和确定和取消的小窗口。

我想通过单击确定来启动另一个窗口。 (这工作正常) 我的问题是,初始窗口在后台保持活动状态。 (我怎样才能只关闭初始窗口?我所有的尝试都关闭了整个程序。我不知道我需要改变什么?

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_())

【问题讨论】:

标签: python pyqt qt4 qt5


【解决方案1】:

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

【讨论】:

  • 我用 self.hide() 测试它,但这也隐藏了第二个窗口
  • 您不能在 OP 的示例中执行 self.hide(),因为 self 不是小部件。
  • @JosefGschwentner。在第一个窗口调用hide()close() 是正确的做法。但是,它只有在第二个窗口是顶级窗口时才能正常工作(即,如果它没有父窗口)。
猜你喜欢
  • 2012-10-17
  • 1970-01-01
  • 2022-07-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多