在更改按钮内容时,如何使此代码更加自动化?

2024-10-01 07:26:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我写这段代码是为了开始制作一个TictaToe游戏,我很确定有一种方法可以制作一个函数,改变上次按下的按钮的内容或类似的东西

我怎样才能把它做成更简短的版本

我想我可以用。赛尔夫做一件事,但我不知道怎么做

import tkinter as tk

main = tk.Tk()

l1b1 = tk.StringVar()
l1b1.set("0")
l1b2 = tk.StringVar()
l1b2.set("0")
l1b3 = tk.StringVar()
l1b3.set("0")

l2b1 = tk.StringVar()
l2b1.set("0")
l2b2 = tk.StringVar()
l2b2.set("0")
l2b3 = tk.StringVar()
l2b3.set("0")

l3b1 = tk.StringVar()
l3b1.set("0")
l3b2 = tk.StringVar()
l3b2.set("0")
l3b3 = tk.StringVar()
l3b3.set("0")


def l1b1co():
l1b1.set("x")


def l1b2co():
    l1b2.set("x")


def l1b3co():
    l1b3.set("x")


def l2b1co():
    l2b1.set("x")


def l2b2co():
l2b2.set("x")


def l2b3co():
    l2b3.set("x")


def l3b1co():
    l3b1.set("x")


def l3b2co():
    l3b2.set("x")


def l3b3co():
    l3b3.set("x")


tk.Button(main, textvariable=l1b1, command=l1b1co).grid(column=0, row=0)
tk.Button(main, textvariable=l1b2, command=l1b2co).grid(column=1, row=0)
tk.Button(main, textvariable=l1b3, command=l1b3co).grid(column=2, row=0)

tk.Button(main, textvariable=l2b1, command=l2b1co).grid(column=0, row=1)
tk.Button(main, textvariable=l2b2, command=l2b2co).grid(column=1, row=1)
tk.Button(main, textvariable=l2b3, command=l2b3co).grid(column=2, row=1)

tk.Button(main, textvariable=l3b1, command=l3b1co).grid(column=0, row=2)
tk.Button(main, textvariable=l3b2, command=l3b2co).grid(column=1, row=2)
tk.Button(main, textvariable=l3b3, command=l3b3co).grid(column=2, row=2)

main.mainloop()

Tags: maindefcolumnbuttoncommandtkgridrow
1条回答
网友
1楼 · 发布于 2024-10-01 07:26:50

最简单的解决方案是使用字典或列表列表,并在循环中创建所有内容

因为您创建的是三行三列,所以可以使用循环对行进行迭代,并且在每次迭代中可以对列进行循环。您可以使用行和列编号来引用每个变量或按钮

例如:

import tkinter as tk

main = tk.Tk()

buttons = {}
button_vars = {}

def setVar(row, column, value):
    button_vars[row, column].set(value)

for row in range(3):
    for column in range(3):
        var = tk.StringVar(value="0")
        button = tk.Button(main, textvariable=var,
                           command=lambda row=row, column=column: setVar(row, column, "x"))
        button.grid(row=row, column=column)

        button_vars[row, column] = var
        buttons[row, column] = button

main.mainloop()

相关问题 更多 >