与按钮对应的数组
Corresponding arrays with buttons
我正在制作一个数独网格,我已经成功地生成了一个 9x9 的按钮网格。
我还创建了一个包含 81 个值的数组。
无论如何我可以获取按钮内的值以匹配它们在数组中的相关索引。我只想显示一些数字,也许每行大约 3 个?有什么想法吗!?
这是按钮生成器:
#Create a 9x9 (rows x columns) grid of buttons inside the frame
for row_index in range(9):
for col_index in range(9):
if (row_index in {0, 1, 2, 6, 7, 8} and col_index in {3, 4, 5}) or \
(row_index in {3, 4, 5} and col_index in {0, 1, 2, 6, 7, 8}): #Colours a group of 3x3 buttons together to differentiate the board better.
colour = 'gray85'
else:
colour = 'snow'
c=True
btn = Button(frame, width = 12, height = 6, bg=colour) #create a button inside frame
btn.grid(row=row_index, column=col_index, sticky=N+S+E+W)
btn.bind("<Button-1>", LeftClick)
buttons.append(btn)
这是值数组:
easy = [
[8,5,1,9,4,3,6,7,2],
[4,3,9,6,7,2,5,1,8],
[6,7,2,1,8,5,9,3,4],
[1,2,3,7,9,4,8,6,5],
[7,6,5,2,1,8,4,9,3],
[9,4,8,3,5,6,7,2,1],
[5,9,6,4,2,1,3,8,7],
[2,8,7,5,3,9,1,4,6],
[3,1,4,8,6,7,2,5,9],
]
我尝试过枚举的想法,但是没有取得任何成功。
def Enumerate():
for row_index in enumerate(easy):
for col_index in enumerate(row_index):
for btn in buttons:
btn.config(text=col_index)
当我运行枚举函数时,显示如下。
https://gyazo.com/1aeba588e321b5228e2d50d68ab24583
对于每个按钮的文本,它输出数组中的最终列表。我觉得它与枚举周围的循环有关,但是我不确定当时我可以执行此任务的任何其他方式。
在创建时将文本分配给按钮是否有意义?例如,
button_text = str(easy[row_index][col_index])
btn = Button(frame, width = 12, height = 6, bg=colour, text=button_text)
您的 Enumerate() 函数有问题:
- 在每次迭代时枚举 returns 一个元组。该元组由 iterable(list) 中的索引和该索引处的列表项组成。这意味着您的第二个 for 语句不是遍历列表中的每一行数据,而是遍历 (index, list) 的元组。
- 您通过 col_index 循环遍历并处理每个迭代的整个按钮列表。
试试这个函数:
def populate():
for row_index, row_data in enumerate(easy):
for col_index, cell_value in enumerate(row_data):
buttons[(row_index * 9) + col_index].config(text=cell_value)
我正在制作一个数独网格,我已经成功地生成了一个 9x9 的按钮网格。 我还创建了一个包含 81 个值的数组。 无论如何我可以获取按钮内的值以匹配它们在数组中的相关索引。我只想显示一些数字,也许每行大约 3 个?有什么想法吗!?
这是按钮生成器:
#Create a 9x9 (rows x columns) grid of buttons inside the frame
for row_index in range(9):
for col_index in range(9):
if (row_index in {0, 1, 2, 6, 7, 8} and col_index in {3, 4, 5}) or \
(row_index in {3, 4, 5} and col_index in {0, 1, 2, 6, 7, 8}): #Colours a group of 3x3 buttons together to differentiate the board better.
colour = 'gray85'
else:
colour = 'snow'
c=True
btn = Button(frame, width = 12, height = 6, bg=colour) #create a button inside frame
btn.grid(row=row_index, column=col_index, sticky=N+S+E+W)
btn.bind("<Button-1>", LeftClick)
buttons.append(btn)
这是值数组:
easy = [
[8,5,1,9,4,3,6,7,2],
[4,3,9,6,7,2,5,1,8],
[6,7,2,1,8,5,9,3,4],
[1,2,3,7,9,4,8,6,5],
[7,6,5,2,1,8,4,9,3],
[9,4,8,3,5,6,7,2,1],
[5,9,6,4,2,1,3,8,7],
[2,8,7,5,3,9,1,4,6],
[3,1,4,8,6,7,2,5,9],
]
我尝试过枚举的想法,但是没有取得任何成功。
def Enumerate():
for row_index in enumerate(easy):
for col_index in enumerate(row_index):
for btn in buttons:
btn.config(text=col_index)
当我运行枚举函数时,显示如下。 https://gyazo.com/1aeba588e321b5228e2d50d68ab24583
对于每个按钮的文本,它输出数组中的最终列表。我觉得它与枚举周围的循环有关,但是我不确定当时我可以执行此任务的任何其他方式。
在创建时将文本分配给按钮是否有意义?例如,
button_text = str(easy[row_index][col_index])
btn = Button(frame, width = 12, height = 6, bg=colour, text=button_text)
您的 Enumerate() 函数有问题:
- 在每次迭代时枚举 returns 一个元组。该元组由 iterable(list) 中的索引和该索引处的列表项组成。这意味着您的第二个 for 语句不是遍历列表中的每一行数据,而是遍历 (index, list) 的元组。
- 您通过 col_index 循环遍历并处理每个迭代的整个按钮列表。
试试这个函数:
def populate():
for row_index, row_data in enumerate(easy):
for col_index, cell_value in enumerate(row_data):
buttons[(row_index * 9) + col_index].config(text=cell_value)