クトゥルフ神話TRPGのキャラメイクツールをtkinterで作っているのですがサイコロを振るプログラムがどうもうまくいきません。
実現したいこと
・ROLLを押したときに該当箇所のみが変わるようにしたい。
・ALL ROLLを押したときにすべて変わるようにしたい
前提
ボタンを押してもtkinter上の文字が変わらず、最後の8番目のボタンを押したときと、ALL ROLLを押したときだけしか変わりません。しかも数字が同じです。リスト上では変わっています。
該当のソースコード
python3
1import tkinter as tk 2from tkinter import ttk 3import random 4 5root=tk.Tk() 6root.geometry('400x600') 7root.title('クトゥルフ神話ツール') 8flame=tk.Frame(root) 9flame.grid(row=0,column=0) 10 11def roll(i): 12 def x(): 13 status_amount=0 14 if i==2 or i==5: 15 status_amount=random.randint(8,18) 16 amount_status[i]=status_amount 17 else: 18 status_amount=random.randint(3,18) 19 amount_status[i]=status_amount 20 number_set() 21 point_label=tk.Label(flame,text=amount_status[5]*10+amount_status[7]*20, 22 font=('HG丸ゴシックM-PRO',30),foreground='#ff0000') 23 point_label.grid(row=8,column=2) 24 25 return x 26 27def number_set(): 28 global amount_status 29 for i in range(8): 30 var.set(amount_status[i]) 31 amount_label=tk.Label(flame,textvariable=var,font=('HG丸ゴシックM-PRO',30),foreground='#ff0000') 32 amount_label.grid(row=i,column=2) 33 print(amount_status) 34 35def roll_all(): 36 def x(): 37 #global var 38 for i in range(8): 39 status_amount=0 40 if i==2 or i==5: 41 status_amount=random.randint(8,18) 42 amount_status[i]=status_amount 43 else: 44 status_amount=random.randint(3,18) 45 amount_status[i]=status_amount 46 number_set() 47 point_label=tk.Label(flame,text=amount_status[5]*10+amount_status[7]*20, 48 font=('HG丸ゴシックM-PRO',30),foreground='#ff0000') 49 point_label.grid(row=8,column=2) 50 51 return x 52 53 54 55 56status=['STR','CON','SIZ','DEX','APP','INT','POW','EDU'] 57amount_status=[0,0,0,0,0,0,0,0] 58var=tk.IntVar() 59for i in range(8): 60 var.set(amount_status[i]) 61 label=tk.Label(flame,text=status[i],font=('HG丸ゴシックM-PRO',30)) 62 button=tk.Button(flame,text='ROLL',font=('HG丸ゴシックM-PRO',15),command=roll(i)) 63 label.grid(row=i,column=0) 64 button.grid(row=i,column=1) 65 amount_label=tk.Label(flame,textvariable=var,font=('HG丸ゴシックM-PRO',30),foreground='#ff0000') 66 amount_label.grid(row=i,column=2) 67ginou_label=tk.Label(flame,text='技能ポイント',font=('HG丸ゴシックM-PRO',20)) 68ginou_label.grid(row=8,column=1) 69all_push=tk.Button(flame,text='ROLL ALL',font=('HG丸ゴシックM-PRO',15),command=roll_all()) 70all_push.grid(row=8,column=0) 71 72root.mainloop() 73 74
試したこと
IntVerを使ってみましたがうまくいきません。
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。