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

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

新規登録して質問してみよう
ただいま回答率
85.46%
for

for文は、様々なプログラミング言語で使われている制御構造です。for文に定義している条件から外れるまで、for文内の命令文を繰り返し実行します。

Tkinter

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

Python

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

Q&A

解決済

1回答

1198閲覧

python for文での繰り返し操作について

cvrte

総合スコア2

for

for文は、様々なプログラミング言語で使われている制御構造です。for文に定義している条件から外れるまで、for文内の命令文を繰り返し実行します。

Tkinter

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

Python

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

0グッド

1クリップ

投稿2020/08/23 06:17

前提・実現したいこと

画像をtkinter上に表示する→好きか嫌いかを評価する→新しい画像に更新され同じように好きか嫌いかを評価する
という試行を決められた回数繰り返したく、プログラム全体をforでループさせてみているのですが、その回数を超えても一向に終わらず、無限にボタンを押すことができてしまいます。
ボタンを押すという操作を決めた回数でまわすためには、btn.bindをループさせるのがよいのかとも考えましたが、調べてもそのような例がなく、解決に至らず質問させていただきました。
どなたかご教示いただけますと幸いです。

該当のソースコード

root = tkinter.Tk() root.title("タイトル") for i range (10): def func1(event): #いろいろな画像を提示するというプログラムです    .    .    . def culc1(event): print(好き) func1(event): def culc2(event): print(嫌い)    func1(event): btn1= tkinter.Button(root, text='好き',width=10) btn1.bind("<Button-1>",culc1) btn1.place(x=150,y=200) btn2= tkinter.Button(root, text='嫌い',width=10) btn2.bind("<Button-1>",culc2) btn2.place(x=200,y=200) tkinter.mainloop()

補足情報(FW/ツールのバージョンなど)

python3

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

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

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

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

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

meg_

2020/08/23 07:06 編集

質問のコードを実行すると「invalid syntax」や「expected an indented block」エラーが発生します。検証可能なコードを提示ください。
guest

回答1

0

ベストアンサー

掲題のコードではfor文で何度もイベントだけに限らず
都度ウィジェットを生成し関数を定義して~といったコードになってしまっています。

クリックされた回数を計測する変数と上限を定める変数を用意し
カウントが上限に達した場合に処理を分岐させるという様なコードではいかがでしょうか。

python

1import tkinter 2root = tkinter.Tk() 3root.title("タイトル") 4 5limit = 10 6cnt = 0 7def func1(event): 8 #いろいろな画像を提示するというプログラムです 9 10def culc1(event): 11 global cnt 12 cnt += 1 13 if cnt <= limit: 14 func1(event) 15 else: 16 limit_over() 17 18def culc2(event): 19 global cnt 20 cnt += 1 21 if cnt <= limit: 22 func1(event) 23 else: 24 limit_over() 25 26def limit_over(): 27 # cntがlimitに達した時の処理(cntに0を代入し直しリセットする,ボタンをstate=disabledにする等) 28 29 30btn1= tkinter.Button(root, text='好き',width=10) 31btn1.bind("<Button-1>",culc1) 32btn1.place(x=150,y=200) 33 34btn2= tkinter.Button(root, text='嫌い',width=10) 35btn2.bind("<Button-1>",culc2) 36btn2.place(x=200,y=200) 37 38tkinter.mainloop()

投稿2020/08/23 07:04

編集2020/08/23 07:16
nto

総合スコア1438

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

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

cvrte

2020/08/23 07:51

カウンタを設定しifで処理を分けるのですね...コード例を参考に学びたいと思います。 カウンタが上限に達したときの処理は、root.destroy()で終了させることにしてみます。 教えてくださり、ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問