使用Tkinter的掷骰子器

1 投票
1 回答
1570 浏览
提问于 2025-04-15 15:19

感谢大家帮助我回答我上一个问题

我的朋友拿了代码,试着用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))

撰写回答