如何 运行 通过列表循环内的变量? - python

How to run through a list a variables within a loop? - python

我正在从事解决数独游戏的项目。为了收集输入,我使用了一个名为“Tkinter”的 GUI,它有 81 个独立的输入(输入)框。我还有一个提交按钮。当我按下提交时,我想创建一系列包含单元格值、行和列等属性的对象。下面的代码执行此操作,但我必须复制并粘贴此代码 81 次,每次只将变量名称和位置调整一个(在提交函数内)。有什么方法可以创建一个循环,可以在更改变量名称的数字部分的同时将这些代码行迭代 81 次?

class Cell:
    def __init__(self,number,location):
        self.number = number
        self.row = (location // 9) + 1
        self.column = (location % 9) + 1

def submit():
    cell1 = Cell(c1.get(),0)
    cell2 = Cell(c2.get(),1)
    cell3 = Cell(c3.get(),2)
    ...

*.get() 方法是我在按下按钮后从输入框(称为 c1、c2、c3...)中检索数字的方式。

**位置只是我用来查找行和列信息的数字 (0-80)。

我能想到的最简单的方法是使用嵌套 for 循环来创建小部件并将它们网格化(顺便说一下 rowcolumn 从 0 开始)并附加到列表, 以后可以从那里引用它们。因此,当您按下按钮时,它会遍历该列表中的每个 Entry 并调用它们的 get 方法(以及 print 的值):

import tkinter as tk


def submit():
    for e in entry_list:
        print(e.get())


root = tk.Tk()

entry_list = []
for col in range(9):
    for row in range(9):
        entry = tk.Entry(root, width=2, font=('Calibri', 20))
        entry.grid(row=row, column=col, sticky='news')
        entry_list.append(entry)

btn = tk.Button(root, text='Submit', command=submit)
btn.grid(row=9, column=0, columnspan=9)

root.mainloop()