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

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

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

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

Tkinter

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

Q&A

解決済

1回答

5127閲覧

tkinterでメイン動作の繰り返しを行いたい

vaitarika

総合スコア29

Python 3.x

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

Tkinter

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

0グッド

1クリップ

投稿2019/09/05 11:16

tkinterを使ってGUIを作成しています。
メインの動作を行うGUIを作成したのですが、そのメインの動作を繰り返し行うためにメインの動作が終わった後に新しくウィンドウを表示させ、同じ操作を行うか否かを「Yes」「No]の二つのボタンから取得して、Yesのボタンをクリックした場合、メイン動作を最初からまた行ない、Noボタンをクリックした場合、その場で終了させるという風にしたいです。

繰り返しを取得させるためのGUIを以下のように書いたのですが、「Yes」「No」どちらのボタンを押しても繰り返しが終わらずに続いてしまいます。

python

1import tkinter as tk 2 3count = 1 4 5while count == 1: 6 7 app = tk.Tk() 8 app.geometry("250x100") 9 #タイトルを指定 10 app.title(u"Yes or No") 11 #ラベル 12 Static1 = tk.Label(text=u'続けて操作を行いますか。') 13 Static1.pack() 14 15 def con(self): 16 count = 1 17 #print(count) 18 app.quit() 19 20 21 def qui(self): 22 count = 0 23 #print(count) 24 app.quit() 25 26 #ボタンを配置する 27 btn1 = tk.Button(text="Yes",width=5) 28 btn1.bind("<Button-1>",con) 29 btn1.place(x=40,y=50) 30 31 #ボタンを配置する 32 btn2 = tk.Button(text="No",width=5) 33 btn2.bind("<Button-1>",qui) 34 btn2.place(x=150,y=50) 35 36 app.mainloop() 37

繰り返しメインのGUIを動作させるにはどうすれば良いでしょうか。

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

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

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

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

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

guest

回答1

0

ベストアンサー

  1. 現在 con()関数 および qui() 関数内で、変数 count の更新を行っていますが、

関数内からグローバルスコープの変数を**「書き換えたい」**場合は global宣言 をする必要があります。
global宣言がない場合、関数内に新しいローカル変数 countが生成される為グローバルスコープの変数は更新されません。

  1. TkのWindowを破棄 する場合は、quit() ではなく destroy() をお使いください。

前者は単に mainloop() を抜けるだけの処理となりますので、Windowは破棄されません。

以上を修正すると以下のようになります。

Python

1import tkinter as tk 2 3count = 1 4 5while count == 1: 6 7 app = tk.Tk() 8 app.geometry("250x100") 9 #タイトルを指定 10 app.title(u"Yes or No") 11 #ラベル 12 Static1 = tk.Label(text=u'続けて操作を行いますか。') 13 Static1.pack() 14 15 def con(self): 16 global count 17 count = 1 18 #print(count) 19 app.destroy() 20 21 22 def qui(self): 23 global count 24 count = 0 25 #print(count) 26 app.destroy() 27 28 #ボタンを配置する 29 btn1 = tk.Button(text="Yes",width=5) 30 btn1.bind("<Button-1>",con) 31 btn1.place(x=40,y=50) 32 33 #ボタンを配置する 34 btn2 = tk.Button(text="No",width=5) 35 btn2.bind("<Button-1>",qui) 36 btn2.place(x=150,y=50) 37 38 app.mainloop()

あと全くカウントしないcount変数も気になります。これは変数名を変えてBool型のデータにした方がよいのではないでしょうか。

投稿2019/09/05 23:49

編集2019/09/06 04:30
magichan

総合スコア15898

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

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

vaitarika

2019/09/06 04:28

親切な回答ありがとうございます! quitではなくdestroyで書くというのは初めて知りました。とても参考になります。 count変数もBool型に変えようと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問