質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

1071閲覧

Pythonで画面を閉じようとするとcloseでエラーになる

WMS

総合スコア37

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

1クリップ

投稿2019/05/18 23:54

編集2019/05/21 02:37

前提・実現したいこと

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 エラーなし

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

setupUiに下記を追加することで画面を閉じることができました。

self.pushButton.clicked.connect(gamen2.close)

投稿2019/05/21 09:43

WMS

総合スコア37

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問