如何获取单个行的值?

时间:2019-07-18 21:18:19

标签: 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)
        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

所以我试图获取有关listCounter的信息:

print(type(listCounter))   --> <class 'list'>
print(type(listCounter[0]) --> <class 'tkinter.Entry'>

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

2 个答案:

答案 0 :(得分:2)

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

section_id

现在,您将能够索引enrollments并获取第一行的元素。以前,您将student_id作为10个元素的单个列表,而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]对象。

答案 1 :(得分:1)

因此,从这个角度来看,我认为您的困惑属于listCounter的“类型”。它不是行列表,每个行都是项目(列)列表。这是每个Entry的列表,每个len(puntuation)都独立地控制其所在的行和列。这就像您拆开棋盘的行并将它们彼此相邻放置一样。您仍然可以独立浏览每一行,只需要一点工作。

看起来好像有2行5列,所以总共有10个条目。如果您尝试打印出10,我猜它是def btnClick(): sum = 0 for puntuation in listCounter[0:5]: sum += puntuation.get() print(sum) 。看起来它也存储在row-major order中。因此,第一行的总和为:

class Float2(types.TypeDecorator):
    ''' Float Type that replaces commas with  dots on input '''
    impl = types.Float
    def process_bind_param(self, value, dialect):  # insert
        return value.replace(',','.')
    def process_result_value(self, value, dialect):  # select
        return value

让我知道是否有帮助!