【发布时间】:2020-07-27 21:07:45
【问题描述】:
我正在创建一个骰子生成器来学习 tkinter。这是我的第一次,所以请多多包涵。我也试图在一个类中制作所有东西,虽然我没有展示所有的代码,因为有很多。 最终目标是能够输入 'x' 数量的 'y' 类型骰子(4、6、8 面骰子等,并计算总数。 而不是单独为每种类型的骰子,我都在尝试使用 for 循环来简化它。
class DiceRoller:
def __init__(self,root):
一开始的代码很多,但以下都在上面的方法中。
self.diceNames = ['D4','D6','D8','D10','D12','D20','D100']
for x in range(len(self.diceNames)):
#DEFINE TEXT FOR ENTRY BOX
self.entryText = 'Roll '+self.diceNames[x]
#CREATE ENTRY BOX
self.entryBox = ttk.Entry(self.rollButtonFrame,
width=self.entryWidth,
textvariable = self.textvariable).grid(row=self.rollRowStart+x,column=self.entryCol)
#CREATE BUTTONS
ttk.Button(self.rollButtonFrame, text = self.entryText,
command = self.rollDice).grid(row=self.rollRowStart+x,column=self.rollCol)
#CREATE LABELS FOR ANSWERS
ttk.Label(self.rollButtonFrame, text = 'Total: 0').grid(row=self.rollRowStart+x,column=self.answerCol)
#CREATE LABELS FOR DESCRIPTIONS
descText = 'Number of '+self.diceNames[x]+' dice: '
ttk.Label(self.rollButtonFrame, text = descText).grid(row=self.rollRowStart+x,column=self.descCol)
command = self.rollDice).grid(row=self.rollRowStart+x,column=self.rollCol)
这会正确创建按钮、标签和输入框,(see here) 但是我不知道如何为每个骰子调用不同的方法。我也不知道这是否是最好的方法。 如何根据输入使每个按钮的行为有所不同,同时在 for 循环中创建按钮,如图所示?
我想如果我可以列出一个方法列表它会起作用,但我不知道它是否可能。
有没有更好的方法来做到这一点?提前致谢!
【问题讨论】:
-
你有两个
for x in range(len(self.diceNames)):循环,这是故意的吗? -
我建议你改掉像
for x in range(len(list))这样循环的习惯。相反,使用for item in list: -
@Barmar 删除了多余的 for 循环,这是无意的。我通常用于列表中的项目,但由于某种原因我没有在这里。在这种特定情况下有很大的优势吗?
-
它只是让代码更容易编写和理解,没有针对这种情况。
-
for x, item in enumerate(self.diceNames)更好,因为您需要grid(...)中的x。此外,您对所有条目的textvariable选项使用相同的self.textvariable。如果其中一个条目被更新,它将使所有条目具有相同的内容。为每个条目使用单独的变量。
标签: python python-3.x object tkinter methods