前提・実現したいこと
Python初心者です。
Qt Designerで画面を3つ作成後、pyファイルに変換してPython3でコーディングしています。
(1)gamen1で「画面2を開く」ボタンを押すと画面2が開き、画面1を閉じる。
(2)gamen2で「画面3を開く」ボタンを押すと画面3が開き、画面2を閉じる。
という流れを作っていますが、(2)の工程で画面2を閉じる際にエラーになってしまいます。
ご教授お願いいたします。
発生している問題・エラーメッセージ
NameError: name 'gamen2 is not defind
該当のソースコード
Python3
1from gamen2 import Ui_gamen2 2from PyQt5 import QtCore, QtGui, QtWidgets 3 4class Ui_gamen1(object): 5 def openWindow(self): 6 self.window = QtWidgets.QMainWindow() 7 self.ui = Ui_gamen2() 8 self.ui.setupUi(self.window) 9 self.window.show() 10 gamen1.close() 11 12 def setupUi(self, gamen1): 13 gamen1.setObjectName("gamen1") 14 gamen1.resize(800, 600) 15 self.centralwidget = QtWidgets.QWidget(gamen1) 16 self.centralwidget.setObjectName("centralwidget") 17 self.pushButton = QtWidgets.QPushButton(self.centralwidget) 18 self.pushButton.setGeometry(QtCore.QRect(300, 280, 151, 61)) 19 self.pushButton.setObjectName("pushButton") 20 self.pushButton.clicked.connect(self.openWindow) 21 self.label = QtWidgets.QLabel(self.centralwidget) 22 self.label.setGeometry(QtCore.QRect(340, 230, 91, 41)) 23 font = QtGui.QFont() 24 font.setPointSize(20) 25 font.setBold(True) 26 font.setWeight(75) 27 self.label.setFont(font) 28 self.label.setObjectName("label") 29 gamen1.setCentralWidget(self.centralwidget) 30 self.statusbar = QtWidgets.QStatusBar(gamen1) 31 self.statusbar.setObjectName("statusbar") 32 gamen1.setStatusBar(self.statusbar) 33 self.retranslateUi(gamen1) 34 QtCore.QMetaObject.connectSlotsByName(gamen1) 35 36 def retranslateUi(self, gamen1): 37 _translate = QtCore.QCoreApplication.translate 38 gamen1.setWindowTitle(_translate("gamen1", "MainWindow")) 39 self.pushButton.setText(_translate("gamen1", "画面2を開く")) 40 self.label.setText(_translate("gamen1", "画面1")) 41 42 43if __name__ == "__main__": 44 import sys 45 app = QtWidgets.QApplication(sys.argv) 46 gamen1 = QtWidgets.QMainWindow() 47 ui = Ui_gamen1() 48 ui.setupUi(gamen1) 49 gamen1.show() 50 sys.exit(app.exec_()) 51
Python3
1from gamen3 import Ui_gamen3 2from PyQt5 import QtCore, QtGui, QtWidgets 3 4class Ui_gamen2(object): 5 def openWindow(self): 6 self.window = QtWidgets.QMainWindow() 7 self.ui = Ui_gamen3() 8 self.ui.setupUi(self.window) 9 self.window.show() 10 gamen2.close() 11 12 def setupUi(self, gamen2): 13 gamen2.setObjectName("gamen2") 14 gamen2.resize(800, 600) 15 self.centralwidget = QtWidgets.QWidget(gamen2) 16 self.centralwidget.setObjectName("centralwidget") 17 self.pushButton = QtWidgets.QPushButton(self.centralwidget) 18 self.pushButton.setGeometry(QtCore.QRect(300, 280, 151, 61)) 19 self.pushButton.setObjectName("pushButton") 20 self.pushButton.clicked.connect(self.openWindow) 21 22 self.label = QtWidgets.QLabel(self.centralwidget) 23 self.label.setGeometry(QtCore.QRect(340, 230, 91, 41)) 24 font = QtGui.QFont() 25 font.setPointSize(20) 26 font.setBold(True) 27 font.setWeight(75) 28 self.label.setFont(font) 29 self.label.setObjectName("label") 30 gamen2.setCentralWidget(self.centralwidget) 31 self.statusbar = QtWidgets.QStatusBar(gamen2) 32 self.statusbar.setObjectName("statusbar") 33 gamen2.setStatusBar(self.statusbar) 34 35 self.retranslateUi(gamen2) 36 QtCore.QMetaObject.connectSlotsByName(gamen2) 37 38 def retranslateUi(self, gamen2): 39 _translate = QtCore.QCoreApplication.translate 40 gamen2.setWindowTitle(_translate("gamen2", "MainWindow")) 41 self.pushButton.setText(_translate("gamen2", "画面3を開く")) 42 self.label.setText(_translate("gamen2", "画面2")) 43 44 45if __name__ == "__main__": 46 import sys 47 app = QtWidgets.QApplication(sys.argv) 48 gamen2 = QtWidgets.QMainWindow() 49 ui = Ui_gamen2() 50 ui.setupUi(gamen2) 51 gamen2.show() 52 sys.exit(app.exec_()) 53 54
試したこと
画面2から実行すると画面3が表示され、画面2は閉じます。
画面1→画面2→画面3 エラー
画面2→画面3 エラーなし
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。