Python:如何在Tkinter中访问按钮外的行/列数据?

2024-06-09 13:30:10 发布

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

我正在尝试在tkinter中创建一个游戏板应用程序。我在画布上有5行(1-5)和6列(0-6)按钮。有没有一种方法可以让按下的按钮的行和列的整数值在assign_Func(按下按钮时被调用)中访问?我想将gameboard[row][column]指定给按下的按钮的索引。在

我当前的代码会产生以下错误: 第31行,在assign_Func中 游戏板[行][列]=11 名称错误:未定义全局名称“row”

from Tkinter import *
from PIL import ImageTk, Image
from Tkinter import Button

gameboard = ([[0,1,2,3,4,5,6],
              [0,1,2,3,4,5,6],
              [0,1,2,3,4,5,6],
              [0,1,2,3,4,5,6],
              [0,1,2,3,4,5,6]])
i = 0

#Essential code              
root = Tk()
frame = Frame(root, background="blue")
frame.pack(expand = TRUE)
window = Tk()


#Supposed to assign the row and column of the pressed button to the row and column of gameboard.

def assign_Func():
    global gameboard
    global i
    while i < 5:
        gameboard[row][column] = 11
        i = i + 1

#Create buttons in rows 1-5, columns 0-6
watermark = Button(frame, background = "red", text="~", fg="black", command=assign_Func)
watermark.grid(row=1, column=0, padx=5, pady=5)

watermark = Button(frame, background = "red", text="~", fg="black", command=assign_Func)
watermark.grid(row=2, column=0, padx=5, pady=5)

watermark = Button(frame, background = "red", text="~", fg="black", command=assign_Func)
watermark.grid(row=3, column=0, padx=5, pady=5)

watermark = Button(frame, background = "red", text="~", fg="black", command=assign_Func)
watermark.grid(row=4, column=0, padx=5, pady=5)

watermark = Button(frame, background = "red", text="~", fg="black", command=assign_Func)
watermark.grid(row=5, column=0, padx=5, pady=5)

#column 1
watermark = Button(frame, background = "red", text="~", fg="black", command=assign_Func)
watermark.grid(row=1, column=1, padx=5, pady=5)

watermark = Button(frame, background = "red", text="~", fg="black", command=assign_Func)
watermark.grid(row=2, column=1, padx=5, pady=5)

watermark = Button(frame, background = "red", text="~", fg="black", command=assign_Func)
watermark.grid(row=3, column=1, padx=5, pady=5)

watermark = Button(frame, background = "red", text="~", fg="black", command=assign_Func)
watermark.grid(row=4, column=1, padx=5, pady=5)

watermark = Button(frame, background = "red", text="~", fg="black", command=assign_Func)
watermark.grid(row=5, column=1, padx=5, pady=5)

# column 2
watermark = Button(frame, background = "red", text="~", fg="black", command=assign_Func)
watermark.grid(row=1, column=2, padx=5, pady=5)

watermark = Button(frame, background = "red", text="~", fg="black", command=assign_Func)
watermark.grid(row=2, column=2, padx=5, pady=5)

watermark = Button(frame, background = "red", text="~", fg="black", command=assign_Func)
watermark.grid(row=3, column=2, padx=5, pady=5)

watermark = Button(frame, background = "red", text="~", fg="black", command=assign_Func)
watermark.grid(row=4, column=2, padx=5, pady=5)

watermark = Button(frame, background = "red", text="~", fg="black", command=assign_Func)
watermark.grid(row=5, column=2, padx=5, pady=5)

# column 3
watermark = Button(frame, background = "red", text="~", fg="black", command=assign_Func)
watermark.grid(row=1, column=3, padx=5, pady=5)

watermark = Button(frame, background = "red", text="~", fg="black", command=assign_Func)
watermark.grid(row=2, column=3, padx=5, pady=5)

watermark = Button(frame, background = "red", text="~", fg="black", command=assign_Func)
watermark.grid(row=3, column=3, padx=5, pady=5)

watermark = Button(frame, background = "red", text="~", fg="black", command=assign_Func)
watermark.grid(row=4, column=3, padx=5, pady=5)

watermark = Button(frame, background = "red", text="~", fg="black", command=assign_Func)
watermark.grid(row=5, column=3, padx=5, pady=5)

# column 4
watermark = Button(frame, background = "red", text="~", fg="black", command=assign_Func)
watermark.grid(row=1, column=4, padx=5, pady=5)

watermark = Button(frame, background = "red", text="~", fg="black", command=assign_Func)
watermark.grid(row=2, column=4, padx=5, pady=5)

watermark = Button(frame, background = "red", text="~", fg="black", command=assign_Func)
watermark.grid(row=3, column=4, padx=5, pady=5)

watermark = Button(frame, background = "red", text="~", fg="black", command=assign_Func)
watermark.grid(row=4, column=4, padx=5, pady=5)

watermark = Button(frame, background = "red", text="~", fg="black", command=assign_Func)
watermark.grid(row=5, column=4, padx=5, pady=5)

# column 5
watermark = Button(frame, background = "red", text="~", fg="black", command=assign_Func)
watermark.grid(row=1, column=5, padx=5, pady=5)

watermark = Button(frame, background = "red", text="~", fg="black", command=assign_Func)
watermark.grid(row=2, column=5, padx=5, pady=5)

watermark = Button(frame, background = "red", text="~", fg="black", command=assign_Func)
watermark.grid(row=3, column=5, padx=5, pady=5)

watermark = Button(frame, background = "red", text="~", fg="black", command=assign_Func)
watermark.grid(row=4, column=5, padx=5, pady=5)

watermark = Button(frame, background = "red", text="~", fg="black", command=assign_Func)
watermark.grid(row=5, column=5, padx=5, pady=5)

#column 6
watermark = Button(frame, background = "red", text="~", fg="black", command=assign_Func)
watermark.grid(row=1, column=6, padx=5, pady=5)

watermark = Button(frame, background = "red", text="~", fg="black", command=assign_Func)
watermark.grid(row=2, column=6, padx=5, pady=5)

watermark = Button(frame, background = "red", text="~", fg="black", command=assign_Func)
watermark.grid(row=3, column=6, padx=5, pady=5)

watermark = Button(frame, background = "red", text="~", fg="black", command=assign_Func)
watermark.grid(row=4, column=6, padx=5, pady=5)

watermark = Button(frame, background = "red", text="~", fg="black", command=assign_Func)
watermark.grid(row=5, column=6, padx=5, pady=5)


root.mainloop()

Tags: textcolumnbuttonredframecommandgridrow
1条回答
网友
1楼 · 发布于 2024-06-09 13:30:10

您可以使用lambda来分配带有command=中参数的函数

Button(..., command=lambda:assign_Func(1, 1) )

而且assign_Func必须得到它

^{pr2}$

如果您要使用for循环来创建Buttons,那么您必须为lambda中的参数赋值

command=lambda r=row,c=col:assign_Func(r, c)

for循环中

for row in range(1, 6):
    for col in range(0, 7):
        b = Button( ... , command=lambda r=row, c=col:assign_Func(r, c))
        b.grid(row=row, column=col, ...)

相关问题 更多 >