Python tkinter,从列表中创建由12个按钮组成的网格

Python tkinter,从列表中创建由12个按钮组成的网格,python,list,for-loop,tkinter,Python,List,For Loop,Tkinter,我试图从3个项目的列表中创建一个由12个按钮组成的网格。目前,代码运行并在网格中创建12个按钮,但每个按钮都是列表中的最后一项。不确定如何存储或保存每行的列表项 import tkinter as tk root = tk.Tk() testList = ['Boop','Yeet','Noop'] nrows = 4 ncols = 3 for r in range(nrows): for c in range(ncols): for i in testLis

我试图从3个项目的列表中创建一个由12个按钮组成的网格。目前,代码运行并在网格中创建12个按钮,但每个按钮都是列表中的最后一项。不确定如何存储或保存每行的列表项

import tkinter as tk


root = tk.Tk()

testList = ['Boop','Yeet','Noop']


nrows = 4
ncols = 3
for r in range(nrows):
    for c in range(ncols):
        for i in testList:
            tk.Button(text=i,padx=50, pady=50).grid(row = r, column=c)



root.mainloop()
当前输出是一个网格,有4列3行,每列上都有Noop一词。

简单的“调试”方法,您可以打印出正在发生的事情:

print("row " + str(r) + ", col " + str(c) + ", item " + i)
您将获得以下输出:

row 0, col 0, item Boop
row 0, col 0, item Yeet
row 0, col 0, item Noop

row 0, col 1, item Boop
row 0, col 1, item Yeet
row 0, col 1, item Noop

row 0, col 2, item Boop
row 0, col 2, item Yeet
row 0, col 2, item Noop

row 1, col 0, item Boop
row 1, col 0, item Yeet
row 1, col 0, item Noop

row 1, col 1, item Boop
row 1, col 1, item Yeet
row 1, col 1, item Noop

row 1, col 2, item Boop
row 1, col 2, item Yeet
row 1, col 2, item Noop

row 2, col 0, item Boop
row 2, col 0, item Yeet
row 2, col 0, item Noop

row 2, col 1, item Boop
row 2, col 1, item Yeet
row 2, col 1, item Noop

row 2, col 2, item Boop
row 2, col 2, item Yeet
row 2, col 2, item Noop

row 3, col 0, item Boop
row 3, col 0, item Yeet
row 3, col 0, item Noop

row 3, col 1, item Boop
row 3, col 1, item Yeet
row 3, col 1, item Noop

row 3, col 2, item Boop
row 3, col 2, item Yeet
row 3, col 2, item Noop
对于行中的每一行、每一列,您都要设置
testList
的值,最后一个值是
'Noop'


我不确定您想做什么,因为在这个问题中还不清楚,但是如果您想让每一行都有这三个项目,您需要迭代每一行,然后对于每一列,给它相应的值
testList
,即
testList[c]

for r in range(nrows):
    for c in range(ncols):
        print("row " + str(r) + ", col " + str(c) + ", item " + testList[c])
        tk.Button(text=testList[c],padx=50, pady=50).grid(row = r, column=c)
输出变为:

row 0, col 0, item Boop
row 0, col 1, item Yeet
row 0, col 2, item Noop

row 1, col 0, item Boop
row 1, col 1, item Yeet
row 1, col 2, item Noop

row 2, col 0, item Boop
row 2, col 1, item Yeet
row 2, col 2, item Noop

row 3, col 0, item Boop
row 3, col 1, item Yeet
row 3, col 2, item Noop


编辑:jasonharper发表评论时,我已经在写我的答案了。这里什么也没偷

因此,您的循环实际上运行了36次。对于每个r和c,它会遍历列表中的所有三个单词,并生成一个按钮,并替换上一个按钮,使您在所有位置都保留最后一个单词。 我最好的猜测是你试图做这样的事情:

import tkinter as tk

root = tk.Tk()

testList = ['Boop','Yeet','Noop']

nrows = 4
ncols = 3
for r in range(nrows):
    for c in range(ncols):
        tk.Button(text=testList[c],padx=50, pady=50).grid(row = r, column=c)

root.mainloop()

您正在这里创建36个按钮-对于
r
c
的每个组合,您正在使用
testList
中的每个字符串创建一个按钮,所有三个按钮都放置在相同的网格位置,以便只有最后一个按钮可见。现在还不清楚您希望如何命名这些按钮,但也许可以去掉i循环的
,在创建按钮时使用
text=testList[c]
,这就解决了问题。我知道这很简单。非常感谢。