Python 如何获取单个行的值?

Python 如何获取单个行的值?,python,python-3.x,tkinter,Python,Python 3.x,Tkinter,我正在制作一个程序,它使用一个列表,有2行5列。每个元素都是一个条目。我希望能够访问列表中整行的所有列 当我一次访问所有行中的所有元素时,它就工作了。但是当我尝试获取一行的值时,它不起作用 这是有效的代码: #Build the grid and append to the listCounter list. for i in range(2): for x in range(5): entry = Entry(frame, text="", width=5)

我正在制作一个程序,它使用一个列表,有2行5列。每个元素都是一个条目。我希望能够访问列表中整行的所有列

当我一次访问所有行中的所有元素时,它就工作了。但是当我尝试获取一行的值时,它不起作用

这是有效的代码:

#Build the grid and append to the listCounter list.
for i in range(2):
    for x in range(5):
        entry = Entry(frame, text="", width=5)
        entry.grid(row=i, column=x)
        listCounter.append(entry)

#Get the value of every row
def btnClick():
    sum = 0
    for puntuation in listCounter:           
        sum += int(puntuation.get())
    print(sum)
但是,当我尝试使用
listCounter[0]
获取一行的所有条目时,它不起作用:

def btnClick():
    sum = 0
    for puntuation in listCounter[0]:           
        sum += int(puntuation.get())
    print(sum)
我得到以下错误:

Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Users\Rober\AppData\Local\Programs\Python\Python37- 
32\lib\tkinter\__init__.py", line 1705, in __call__
return self.func(*args)
File "D:/PyProjects/TestCanvas/Connect4.py", line 25, in btnClick
for puntuation in listCounter[0]:
File "C:\Users\Rober\AppData\Local\Programs\Python\Python37- 
32\lib\tkinter\__init__.py", line 1489, in cget
return self.tk.call(self._w, 'cget', '-' + key)
TypeError: can only concatenate str (not "int") to str
因此,我尝试获取有关
列表计数器的信息:

print(type(listCounter))   --> <class 'list'>
print(type(listCounter[0]) --> <class 'tkinter.Entry'>
打印(类型(列表计数器))-->
打印(类型(列表计数器[0])-->

这里的问题到底是什么?我该如何解决呢?

因此,看看这个,我认为您的困惑在于listCounter的“类型”。它不是一个行列表,每个行都是一个项目(列)列表。它是每个
条目的列表,每个条目都独立地控制其所在的行和列。这就像你把棋盘上的行拆开,并排放在一起一样。你仍然可以独立地浏览每一行,只需要做一点工作

它看起来有2行5列,因此总共有10个条目。如果您尝试打印
len(puntiation)
,我猜它是
10
。它看起来也存储在中。因此,第一行的总和将是:

def btnClick():
    sum = 0
    for puntuation in listCounter[0:5]:
        sum += puntuation.get()
    print(sum)

让我知道这是否有帮助!

如果要创建正确的2D列表(列表列表列表),需要显式创建嵌套元素:

for i in range(2):
    row = []
    for x in range(5):
        entry = Entry(frame, text="", width=5)
        entry.grid(row=i, column=x)
        row.append(entry)
    listCounter.append(row)

现在,您将能够索引
listCounter[0]
并获取第一行的元素。以前,您将
listCounter
作为一个包含10个元素的列表,以及
listCounter[0]
只是一个
条目
对象,这是可以理解的。

您尝试的东西有什么问题?您期望得到什么,您实际得到了什么?如果没有更多的展示和说明,很难帮助您,因为,除其他外,您的术语还没有与主流python用法保持一致。这是正常的,但会在正确解释之前,你需要做额外的工作。抱歉,如果我没有正确解释,我现在有点困惑。所以我知道的是,我在列表中循环,得到了我创建的两行的值。但是我只想要一行。我只是不知道如何在没有得到这两行的情况下得到一行的值。那么如何c我能告诉函数“btnClick”吗只是为了得到第一行?我一直在互联网上搜索,但我无法准确地找到我需要的东西。我真的很难理解你想要实现什么。也许你可以用字符串或数字做一个简单的例子?Tk在这里似乎不是特别相关。展示你的示例用例,而不是尝试使用prose来描述它。我刚刚编辑了它,希望它现在清楚了!在第一个示例中,如果您想获得列表
[1,2,3,4,5]
,只需按原样使用对象
listCounter[0]
。如果您确实需要该列表的副本,请执行
listCounter[0][:]
listCounter[0]。copy()
列表(listCounter[0])
。是的,它帮助我了解了我遗漏了什么!真的非常感谢!感谢您发布解决方案,我看到了我遗漏了什么!非常感谢您花时间帮助我!!@Barrufet正确的操作程序是通过单击旁边的复选标记来选择最能回答您问题的答案这将给你2分,并将问题从未回答的队列中删除。欢迎使用SO和happy编码!