使用Tkinter的掷骰子器
感谢大家帮助我回答我上一个问题:
我的朋友拿了代码,试着用Tkinter做一个框,这样我们可以让界面看起来更好看,但他一直没法把上一个问题中的掷骰子功能和Tkinter结合起来。如果有人能帮忙或者给点建议,把掷骰子的功能加到下面的代码里,那就太好了!
from Tkinter import *
def callme():
label3 = Label(root, text = 'Haha! I lied!')
label3.pack(padx = 10, pady = 10)
root = Tk()
label = Label(root, text = 'How many dice do you want to roll?')
label.pack(padx = 10, pady = 10)
entry = Entry(root,bg = 'white').pack(padx = 10, pady = 10)
label2 = Label(root, text = 'How many dice do you want to roll?')
label2.pack(padx = 10, pady = 10)
entry = Entry(root,bg = 'white').pack(padx = 10, pady = 10)
frame = Frame(root, bg = 'yellow')
button = Button(frame, command = callme, text = 'Roll!',width = 5, height = 2)
frame.pack()
button.pack(padx=10,pady=10)
root.mainloop()
1 个回答
2
因为自己动手尝试解决问题的乐趣很大,所以我给你一些提示,而不是完整的程序。
你应该存储输入的变量,这样你可以在后面再次使用它们来获取值,但不要这样做:
entry = Entry(root,bg = 'white').pack(padx = 10, pady = 10)
这样做并不能达到你预期的效果,因为你同时调用了pack(),它不会返回输入框的内容,最后你会得到NoneType,也就是没有值。应该使用下面的方式:
entry = Entry(root,bg = 'white')
entry.pack(padx = 10, pady = 10)
另外,使用两个不同的输入变量,因为你需要一个来记录掷骰子的次数,另一个来记录骰子的面数,比如:
entry_sides = Entry(root,bg = 'white')
entry_sides.pack(padx = 10, pady = 10)
在你的callme()函数中,你可以再次获取这些值,用来掷骰子:
number_of_sides = int(entry_sides.get())
最后,不要在callme函数里创建label3,而是像其他标签那样,把它作为框架的一部分创建,然后在计算出骰子点数后更新它的值:
def callme():
# get dice total here using variables from entry
label3.config(text = str(dice_total))