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

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

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

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

Qt

QtはGUIプログラムの開発で広く使われているクロスプラットフォーム開発のフレームワークです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

7562閲覧

Pysideでメッセージボックスを表示して、OKボタンを押すと、終了するプログラムを作りたい

退会済みユーザー

退会済みユーザー

総合スコア0

Python 3.x

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

Qt

QtはGUIプログラムの開発で広く使われているクロスプラットフォーム開発のフレームワークです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

1クリップ

投稿2016/10/27 12:52

###前提・実現したいこと
Pysideでメッセージボックスを表示して、OKボタンを押すと、終了するプログラムを作りたい。よろしくおねがいします。

###発生している問題
ウィンドウを閉じるときに、余計なウィンドウ?が表示されてしまう。

###該当のソースコード

python

1# coding: utf-8 2# Here your code ! 3 4import sys 5import PySide 6from PySide import QtGui 7 8class Widget01(QtGui.QWidget): 9 def __init__(self): 10 super().__init__() 11 self.msgbox01() 12 13 def msgbox01(self): 14 msgBox = QtGui.QMessageBox(self) 15 msgBox.setText("Hello World - using PySide version " + PySide.__version__) 16 msgBox.exec_() 17 18if __name__ == '__main__': 19 app = QtGui.QApplication(sys.argv) 20 21 w01 = Widget01() 22 w01.show() 23 24 sys.exit(app.exec_()) 25

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

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

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

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

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

guest

回答2

0

ベストアンサー

とりあえず、メッセージボックスの表示部分をコメントアウトしてみてください。

python

1class Widget01(QtGui.QWidget): 2 def msgbox01(self): 3 #msgBox = QtGui.QMessageBox(self) 4 #msgBox.setText("Hello World - using PySide version " + PySide.__version__) 5 #msgBox.exec_() 6 #コメントアウトするだけではエラーになるので 7 pass 8

「余計なウィンドウ」が表示されましたよね?
要はあなたのプログラムは、「ウィンドウを表示するプログラムの、ウィンドウの初期化時にメッセージボックスを表示する」プログラムなんです。

メッセージボックスを表示する「だけ」であれば、QWidgetを作る必要はありません。(PySideはよく知らんけど、多分)

python

1# coding: utf-8 2 3import sys 4import PySide 5from PySide import QtGui 6 7if __name__ == '__main__': 8 app = QtGui.QApplication(sys.argv) 9 10 dlg = QtGui.QMessageBox() 11 dlg.setText("Hello World - using PySide version " + PySide.__version__) 12 dlg.exec_() 13 14

(linuxmint18 PySide1,2,2で確認)


先も言ったとおりPySide(Qt)は詳しくないのであまりコメントするのもはばかられるのだけど、乗りかかった船ということで、ちょっと付き合いましょうか。

でも、QMessageBoxって、QWidgetに配置できないんでしょか。。。

この意味がちょっと理解できないのですが、こういうことでしょうかね。

python

1# coding: utf-8 2 3import sys 4import PySide 5from PySide import QtGui 6 7class Msgbox01(QtGui.QMessageBox): 8 def __init__(self): 9 super().__init__() 10 self.setText("Hello World - using PySide version " + PySide.__version__) 11 12if __name__ == '__main__': 13 app = QtGui.QApplication(sys.argv) 14 15 m01 = Msgbox01() 16 m01.show() 17 18 sys.exit(app.exec_()) 19

QMessageBoxはQWidgetの派生クラスであるため、QWidgetと似たような扱いができます。

あと、公式サイト(?)のチュートリアルにも、似たようなチュートリアルがありましたので、紹介しておきます。

とりあえず、いろんなサンプルに触れてみることをおすすめします。


あ、書いている間に自己解決されてようですね。
でもせっかくなので、投稿しておきます。

投稿2016/10/27 14:46

編集2016/10/27 16:37
katsuko

総合スコア3469

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

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

退会済みユーザー

退会済みユーザー

2016/10/27 15:08

ご回答ありがとうございます。やはり、ウィンドウを2重に表示してしまっていたんですね。
退会済みユーザー

退会済みユーザー

2016/10/27 16:54

なるほど!再度のご回答誠にありがとうございます! どうやら、自分のQMessageBoxに対する認識が間違ってたみたいですね。 QDialogも参考にして、学習し直します。
guest

0

解決したと思って、以下のコードを書いたのですが、これだと正常に終了しないです。

python

1# coding: utf-8 2# Here your code ! 3 4import sys 5import PySide 6from PySide import QtGui 7 8class Msgbox01(QtGui.QMessageBox): 9 def __init__(self): 10 super().__init__() 11 self.setText("Hello World - using PySide version " + PySide.__version__) 12 self.exec_() 13 14if __name__ == '__main__': 15 app = QtGui.QApplication(sys.argv) 16 17 m01 = Msgbox01() 18 19 sys.exit(app.exec_()) 20

結局のところ、katsukoさんのご回答のならって、以下のコードになりました。
でも、QMessageBoxって、QWidgetに配置できないんでしょか。。。

python

1# coding: utf-8 2# Here your code ! 3 4import sys 5import PySide 6from PySide import QtGui 7 8if __name__ == '__main__': 9 app = QtGui.QApplication(sys.argv) 10 11 dlg = QtGui.QMessageBox() 12 dlg.setText("Hello World - using PySide version " + PySide.__version__) 13 dlg.exec_() 14

さらに、exec_()メソッドが2回実行されてるのが、おかしいことに気づき、以下のコードにたどり着く。

python

1# coding: utf-8 2# Here your code ! 3 4import sys 5import PySide 6from PySide import QtGui 7 8class Msgbox01(QtGui.QMessageBox): 9 def __init__(self): 10 super().__init__() 11 self.setText("Hello World - using PySide version " + PySide.__version__) 12 13if __name__ == '__main__': 14 app = QtGui.QApplication(sys.argv) 15 16 m01 = Msgbox01() 17 m01.exec_() 18 19 #sys.exit(app.exec_()) # ← これはいらない 20

【結論】、このやり方で、QMessageBoxを、QWidgetに配置してみたらできました。
結局、exec_()は、終了時に1回実行されるべきものなんですね。

python

1# coding: utf-8 2# Here your code ! 3 4import sys 5import PySide 6from PySide import QtGui 7 8class Widget01(QtGui.QWidget): 9 def __init__(self): 10 super().__init__() 11 self.msgbox01() 12 13 def msgbox01(self): 14 msgBox = QtGui.QMessageBox(self) 15 msgBox.setText("Hello World - using PySide version " + PySide.__version__) 16 msgBox.exec_() 17 18if __name__ == '__main__': 19 app = QtGui.QApplication(sys.argv) 20 21 w01 = Widget01() 22

投稿2016/10/27 15:11

編集2016/10/27 16:19
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問