2015-08-25 17 views
0

Я новичок в PyQt5 и хочу кодировать небольшую программкуЗакрыть окно и открыть новую в Python с PyQt

я разработал два окна в QT Designer и convertet их в р Script. После этого я объединил оба файла в один файл (возможно, моя попытка не соответствует действительности), поэтому pls исправить меня)

Когда программа запускается, я получаю небольшое окно с некоторыми кнопками радио и ОК и Отмена.

Я хочу запустить другое окно, нажав ОК. (Это отлично работает) Моя проблема заключается в том, что начальное окно остается активным в фоновом режиме. (Как я могу закрыть только исходное окно? Все мои попытки закрыла всю программку. Я не знаю, что я должен изменить?

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

Возможный дубликат [Невозможно создать новое окно в PyQt без наличия родителя] (http://stackoverflow.com/questions/30879261/cannot -create-a-new-window-in-pyqt-without-it-having-a-parent) –

+0

Ошибочно объединять файлы, сгенерированные pyuic. Вы должны ** никогда не редактировать эти файлы. См. раздел [ pyqt docs] (http://pyqt.sourceforge.net/Docs/PyQt5/designer.h tml) для примеров того, как правильно поступать. – ekhumoro

ответ

-1

Возможно, призывающей self.hide() в начале методы OnOK (Untested) Вы можете найти некоторые методы here.

+0

Я тестирую его с self.hide(), но это также скрывает второе окно. –

+0

Вы не можете сделать 'self.hide()' в примере OP, потому что 'self' не является виджетами. – ekhumoro

+0

@JosefGschwentner. Вызов 'hide()' или 'close()' в первом окне - это правильная вещь. Однако он будет работать только в том случае, если второе окно является верхним (т. Е. Если у него нет родителя). – ekhumoro

Смежные вопросы