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

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

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

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

Tkinter

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。

Q&A

解決済

3回答

3577閲覧

tkinterのライブラリについて

City

総合スコア25

Python 3.x

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

Tkinter

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。

0グッド

0クリップ

投稿2018/03/10 04:45

編集2018/03/10 14:46

閲覧ありがとうございます。

Python

1 2import tkinter as tk 3import tkinter.messagebox as mb 4import sys 5 6while True : 7 root = tk.Tk() 8 root.title("test") 9 . 10 .                11 . 12 root.mainloop() 13 14#while文にすると✖を押してもウィンドウが消えなくなり、sysを活用したexitボタンに意味を持たせることができました。しかし、 15 16

Python

1 2import tkinter as tk 3iport tkinter.messagebox as mb 4import sys 5 6root = tk.Tk() 7root.withdraw() 8yn = mb.askyesno('こんにちは','実行しますか') 9if yn : 10     #以下から本文 11 while True : 12 root.deiconify() 13 root.title("test") 14 . 15 . 16 . 17 root.mainloop() 18 19#このように本文の前にmessageboxを挿入すると、✖を押すとそのままウィンドウが消えるようになりました。なぜそうなるのかさっぱりわかりません。

askyesnoで分岐を発生させ、かつ✖を押してもウィンドウが消えないようにすることは可能でしょうか。ご教授をお願いいたします。


この質問に至るまでにaskyesnoでの分岐をご教授いただいたKSwordOfHasteさんに感謝いたします。

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

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

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

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

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

guest

回答3

0

ベストアンサー

yn = mb.askyesno('こんにちは','実行しますか?')

https://docs.python.jp/3/library/tkinter.html
このあたりをみると「なんともやわらかい」リファレンスであることが伺えます。「どうすればいいかをちょっと調べてからこのリファレンスに戻るといいですよ」と書いてあり「まぁ、なんてやわいのかしら」と思いました。そういうわけで「tkinter messagebox」で検索すると機能をちょこっと紹介した手ごろなページがあり

はいならTrue、そうでないならFalse

らしいサンプルがありました。

mainloop関数を呼ぶとその中でイベントループしてくれるのです。無限ループではありません。ウィンドウの✖(Windowsなら右上)を押すとそれがGUIアプリケーションの終わりです。
そういうふうに作るのです。

Python

1import tkinter 2import tkinter.messagebox as mb 3from tkinter import Frame, ...必要なだけ 4 5root = tkinter.Tk() 6root.withdraw() # ウィンドウを見せないようにする 7 8yn = mb.askyesno('こんにちは','実行しますか?'): 9if yn: 10 root.deiconify() # ウィンドウを見せるようにする 11 root.title("test") 12 root.geometry("300x300") 13 app = Frame(root) 14 ... 15 root.mainloop() 16 17# ✖を押したらここにくる 18# (もうウィンドウは消えているのだからGUIアプリケーションは終わらないといけません)

投稿2018/03/10 07:24

編集2018/03/10 07:33
KSwordOfHaste

総合スコア18394

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

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

KSwordOfHaste

2018/03/10 07:27

ちなみに・・・文法というのは言語によって決まる書き方のことを指します。Pythonの文法とはいいますがtkinterの文法とはいいません。 質問者さんが尋ねたかったことを指すにはtkinterの「ライブラリーの使い方」などという言い方の方が普通です。
City

2018/03/10 14:18

回答ありがとうございます。 askyesnoからの分岐がうまくいき大変うれしいです。 文法ではなくライブラリーの使い方といった表現をするのですね、覚えておきます。 もう一つ質問させていただいてもよろしいでしょうか。
KSwordOfHaste

2018/03/10 15:08

本件に直接関係する質問ならわかれば回答したいと思います。そうでないなら新たな質問を挙げた方がよいです。コメント欄は「この回答」に関する確認/コメントを書く欄であって基本的に「新たな質問をしてよい」欄ではありません。
City

2018/03/10 23:04

Terateil利用方法を誤っていたようです。 もう一度新たに質問を投稿させていただくことにします。
guest

0

こんばんは。

問題文読ませていただきました。

多くの方が観に来られることを鑑みて、上記の回答をコメントしてみました。

python

1import tkinter as tk 2import tkinter.messagebox as mb 3import sys 4 5# メインWindowを表示する。 6setter = tk.Tk() 7# メインWindowを非表示にする。 8setter.withdraw() 9 10# yes, noで答える、messageboxを利用する。 11# messageboxについて : https://kuroro.blog/python/MQcodS4gkjZ4G7JYhQ9Q/ 12yn = mb.askyesno() 13# yesならば、プログラムを続ける。 14if yn: 15 # メインWindowを破棄する。 16 setter.destroy() 17 # 無限ループを呼び出す。 18 while True: 19 # 新しくメインWindowを表示する。 20 root = tk.Tk() 21 # 新しいメインWindowを親要素として、button Widgetを作成する。 22 # text : テキスト情報 23 # command : ボタンをクリックした場合に、呼ばれる関数を設定する。 24 # sys.exit : プログラム自体を終了する。(参考 : https://uxmilk.jp/12929) 25 # Buttonについて : https://kuroro.blog/python/oFju6EngDtcYtIiMIDf1/ 26 exit = tk.Button(root, text="exit", command=sys.exit) 27 # 新しいメインWindowを親要素として、button Widgetをどのように配置するのか? 28 # packについて : https://kuroro.blog/python/UuvLfIBIEaw98BzBZ3FJ/ 29 exit.pack() 30 # 新しいメインWindowを継続的に表示するため、mainloopを呼び出す。 31 # mainloop箇所で継続的にイベント処理を待機するため、while文が繰り返されて、連続的に新しいメインWindowが作成されることはない。 32 # ❌ボタンをクリック(またはcommand + w)するとmainloopが消滅し、プログラムを終了することなく、再度while文を試行して、新しいメインWindowが生成される。 33 # mainloopについて : https://kuroro.blog/python/DmJdUb50oAhmBteRa4fi/ 34 root.mainloop()

多くの方の問題解決に役立ちますように〜。

投稿2021/06/11 11:03

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

Python

1import tkinter as tk 2import tkinter.messagebox as mb 3import sys 4 5setter = tk.Tk() 6setter.withdraw() 7yn = mb.askyesno() 8if yn : 9 setter.destroy() 10 while True : 11 root = tk.Tk() 12 exit = tk.Button(text="exit",command=sys.exit) 13 exit.pack() 14 root.mainloop()

としてやりたかったことを実行することができました。

投稿2018/03/10 23:06

City

総合スコア25

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問