【问题标题】:How to give automatically generated buttons names in Tkinter?如何在 Tkinter 中自动生成按钮名称?
【发布时间】:2016-10-13 21:20:18
【问题描述】:

所以我正在为我正在制作的井字游戏生成一个 3x3 按钮网格,我想最终这样当按下按钮时它会变为 X 或 O,但是我不知道如何给每个按钮一个唯一的标识符,这样我就知道要更改哪个按钮。

这是按钮的代码。

num=1
for row in range(3):
for column in range(3):
    Button(TTTGrid,bg="#ffffff",  width=20,height = 6, command=lambda row=row, column=column: TTTGridPress(row, column),relief=SUNKEN).grid(row=row, column=column, sticky=W)
    num=num+1

【问题讨论】:

    标签: python tkinter


    【解决方案1】:

    使用字典或列表。例如:

    buttons = {}
    for row in range(3):
        for column in range(3):
            buttons[(row, column)] = Button(...)
            buttons[(row, column)].grid(...)
    

    稍后,您可以将第 2 行第 1 列中的按钮称为:

    buttons[(2 1)].configure(...)
    

    注意:您需要在单独的语句中调用grid(或pack,或place),因为它们返回None。如果您在同一条语句上执行此操作(例如:Button(...).grid(...)),则保存的值是None,而不是按钮的实例。

    【讨论】:

    • 好吧,我对这个 GUI 东西很陌生,所以我有一些问题。
    • No 1 - 当我这样做时 (buttons[(2 1)].configure(...)),我可以用行、列替换 2,1 吗?这样任何按钮都可以按任何顺序单击。最后一段我也不太明白,你能解释一下吗?
    • 提问前先试试看。
    • 我有,它有效,但你能不能进一步解释一下第二段。
    • @mexO:我不知道如何更清楚地解释它。也许这会有所帮助:stackoverflow.com/a/1101765/7432
    【解决方案2】:

    实际上,我也遇到过这种 tkinter 标识符问题。所以我得到了答案。如果每一行都有唯一的行列组合号。因此,您可以使用该组合创建一个标识符,然后调用 lambda 函数。在这里,我使用格式化的方式调用参数。它有助于在此处创建唯一标识符。

     TTTGridPress(f'{row}-{column}')
    

    我想你现在可以解决你的问题了。

    num=1
    for row in range(3):
    for column in range(3):
        Button(TTTGrid,bg="#ffffff",  width=20,height = 6, command=lambda row=row, column=column: TTTGridPress(f'{row}-{column}'),relief=SUNKEN).grid(row=row, column=column, sticky=W)
        num=num+1
    

    【讨论】:

      猜你喜欢
      • 2011-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多