创建骰子滚动程序,以在D&D会话中获得乐趣/帮助。尝试创建一个使用输入变量更新画布文本的函数。 (输入变量将是掷骰子)。但是由于某些原因,我无法获取用于更新Canvas文本的按钮。我已经测试了骰子掷骰子函数的输出,它们似乎按建议的方式工作(每个末尾的display()函数除外)。
from tkinter import ttk
from tkinter import messagebox
from tkinter import *
from tkinter.ttk import *
import random
import numpy as np
master = Tk()
master.title('DiceRoll.Exe')
def display(a):
msgbox.itemconfigure(box,text=a)
msgbox.update()
def dmg(x,y,bdmg):
i=0
a=np.zeros(int(x))
for i in range(int(x)):
a[i]= random.randint(1,int(y))
b= int((np.sum(a) + int(bdmg)))
return b
def advan(ad,addbns):
q=np.zeros(ad)
for i in range(ad):
a= random.randint(1,20)
b= random.randint(1,20)
if a > b:
q[i] = (a + addbns)
else:
q[i] = (b + addbns)
display(q)
def disadvan(disadd,disbns):
q=np.zeros(disadd)
for i in range(disadd):
a= random.randint(1,20)
b= random.randint(1,20)
if a < b:
q[i]=(a + disbns)
else:
q[i]=(b + disbns)
display(q)
def dmgroll(z,x,y,bdmg):
a=np.zeros(int(z))
i=0
for i in range( int(z) ):
a[i]= dmg(x,y,bdmg)
display(a)
msgbox=Canvas(master, width= 200, height=50, background="white")
msgbox.grid(row=1, column=5, rowspan=2, columnspan=2)
box=msgbox.create_text(30,25, text="Welcome")
#First Row
z=Spinbox(master, from_=1, to=20, justify= CENTER)
z.grid(row=0, column=0)# Z = number of units making rolls
x=Spinbox(master,from_=1, to=20, justify= CENTER)
x.grid(row=0, column=1) # 'X' is the first number in the XdY diceroll formula
Label(master, text='d').grid(row=0,column=2)
y=Spinbox(master,from_=1, to=20, justify= CENTER)
y.grid(row=0, column=3) #'Y' is the 2nd number in the XdY diceroll formula
Label(master, text='+').grid(row=0,column=4)
bdmg=Spinbox(master, from_=0, to=20, justify= CENTER)
bdmg.grid(row=0, column=5) #bdmg= bonus damage XdY + bdmg
roll=Button(master, text="Roll Dice", command= dmgroll(z.get(),x.get(),y.get(),bdmg.get())).grid(row=0, column=6)
#2nd Row
ad=Spinbox(master, from_=1, to=20, justify=CENTER)
ad.grid(row=1, column=0)
Label(master, text="+").grid(row=1, column=2)
addbns=Spinbox(master, from_=0, to=20, justify=CENTER)
addbns.grid(row=1, column=3)
advantage=Button(master, text="Advantage Roll", command = advan(int(ad.get()),int(addbns.get()))).grid(row=1,column=1)
#3rd Row
disadd=Spinbox(master, from_=1, to=20, justify=CENTER)
disadd.grid(row=2, column=0)
Label(master, text="+").grid(row=2, column=2)
disbns=Spinbox(master, from_=0, to=20, justify=CENTER)
disbns.grid(row=2, column=3)
disadvantage=Button(master, text="Disadvantage Roll", command= disadvan(int(disadd.get()),int(disbns.get()))).grid(row=2, column=1)
msgbox.itemconfigure(box, text="Welcome")
master.mainloop()
答案 0 :(得分:0)
在Google的帮助下,我自己设法弄清楚了,然后弄清楚了发生了什么。
在我的原始代码中,当我创建一个按钮并设置command = diceroll()时。我不知道命令功能在创建按钮后立即执行。
为了将command =函数设置为等到按下按钮才能执行,您需要在其前面添加“ lambda:”标记。
advantage=Button(master, text="Advantage Roll", command = lambda: advan(int(ad.get()),int(addbns.get())))