前提・実現したいこと
pythonでおみくじを作りました。入力した数字とランダム数字を足したもので結果を表示しています。10より大きな数字を入力したら再入力を求め、0から10の数字を入力したら「0から10の数字を入力してください。」というラベルを削除したいです。
発生している問題・エラーメッセージ
again_text.destroy() UnboundLocalError: local variable 'again_text' referenced before assignment
該当のソースコード
python
1どこから載せればいいか分からないので全部。 2import tkinter 3 4root = tkinter.Tk() 5root.title("運勢占い") 6root.minsize(640, 480) 7root.option_add("*font", ["MS Pゴシック", 22]) 8 9getu = tkinter.PhotoImage(file="大吉.png") 10ka = tkinter.PhotoImage(file="凶.png") 11sui = tkinter.PhotoImage(file="吉.png") 12moku = tkinter.PhotoImage(file="小吉.png") 13 14canvas = tkinter.Canvas(bg="plum", width=640, height=480) 15canvas.place(x=0, y=0) 16img = tkinter.PhotoImage(file="神社.png") 17canvas.create_image(320, 240, image=img) 18 19question = tkinter.Label(text="あなたが入力した数字で今日の運勢を調べます。\n0から10の数字を入力してください。", bg="plum") 20question.place(x=27, y=20) 21 22entry = tkinter.Entry(width=3, bd=7, bg="orchid") 23entry.place(x=289, y=140) 24 25button = tkinter.Button(text="決定") 26button.place(x=280, y=400) 27 28import random 29D = random.randint(0,5) 30 31def btn_click(): 32 a = float(entry.get()) 33 if a > 10: 34 again_text = tkinter.Label(text="0から10の数字を入力してください。",fg="red",bg="plum") 35 again_text.place(x=105,y=30) 36 question.destroy() 37 return 38 if 1 <= a+D <= 3 or a+D == 10: 39 again_text.destroy() 40 res_text = tkinter.Label(text="あなたの今日の運勢は大吉です。",fg="red", bg="plum") 41 res_text.place(x=115, y=20) 42 res_text = tkinter.Label(text="やったね!", bg="plum") 43 res_text.place(x=250, y=425) 44 canvas.delete("all") 45 question.destroy() 46 entry.destroy() 47 button.destroy() 48 canvas.create_image(320, 240, image=getu) 49 if a+D > 10: 50 again_text.destroy() 51 res_text = tkinter.Label(text="あなたの今日の運勢は凶です。",fg="darkviolet",bg="plum") 52 res_text.place(x=120, y=20) 53 res_text = tkinter.Label(text="ざんねーん", bg="plum") 54 res_text.place(x=250, y=425) 55 canvas.delete("all") 56 question.destroy() 57 entry.destroy() 58 button.destroy() 59 canvas.create_image(320, 240, image=ka) 60 if 5 <= a+D <= 8: 61 again_text.destroy() 62 res_text = tkinter.Label(text="あなたの今日の運勢は吉です。",fg="green",bg="plum") 63 res_text.place(x=120, y=20) 64 res_text = tkinter.Label(text="よきかな", bg="plum") 65 res_text.place(x=260, y=425) 66 canvas.delete("all") 67 question.destroy() 68 entry.destroy() 69 button.destroy() 70 canvas.create_image(320, 240, image=sui) 71 if a+D == 4 or a+D == 0: 72 again_text.destroy() 73 res_text = tkinter.Label(text="あなたの今日の運勢は小吉です。",fg="sienna",bg="plum") 74 res_text.place(x=120, y=20) 75 res_text = tkinter.Label(text="まぁまぁかな", bg="plum") 76 res_text.place(x=243, y=425) 77 canvas.delete("all") 78 again_text.destroy() 79 question.destroy() 80 entry.destroy() 81 button.destroy() 82 canvas.create_image(320, 240, image=moku) 83 84button["command"] = btn_click 85root.mainloop()
試したこと
again_text.destroy()を置く場所を変えてみたり、returnもいじってみたりしました。調べてもreturnの使い方が分からないのとエラーメッセージの言ってることもわかりません。
補足情報(FW/ツールのバージョンなど)
Windows10
python3.7.1
vscode
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/10/05 11:08