我有一个数组
function changeCountry(countryName) {
let clickedContry = document.getElementById(countryName);
let totalCountries = document.getElementsByClassName("country");
if(clickedContry.classList.contains("countryActive")) {
for (let i = 0; i < totalCountries.length; i++) {
if (totalCountries[i].classList.contains("countryInactive")) {
totalCountries[i].classList.replace("countryInactive", "countryActive");
}
}
} else {
// Remove class countryActive from previous selection
clickedContry.classList.add("countryActive");
}
}
我想创建一个图像,使绿色框为1,红色框为0
P.S。我不想作图,但要作图。
使用Tkinter,我将所有盒子都放在一行中,但是我需要像2D数组中那样将它们排列成行和列。 在我的代码中,打印出与一行相对应的框后,我无法确定如何移动到新行
arr = [[1,0,0,1],
[1,1,1,1],
[1,1,1,0]]
答案 0 :(得分:2)
您应该使用.grid()
布局管理器
for i in range(len(arr)): #rows in arr
for j in range(len(arr[i])): #cols in that row
if arr[i][j]==0:
w = tk.Label(root, text="red", bg="red", fg="white")
elif arr[i][j]==1:
w = tk.Label(root, text="green", bg="green", fg="black")
w.grid(row = i, col = j)
这会将标签放置在由行和列组成的“二维表”中。
还有padx
和pady
用于填充
注释,如果可以改进的话。
答案 1 :(得分:1)
Tkinter grid()方法:
网格几何管理器将小部件放在二维表中。 主窗口小部件分为许多行和列,每个 结果表中的“单元格”可以容纳一个小部件。
使用grid方法告诉管理器将它们放置在哪一行和哪一列中。您不必预先指定网格的大小;管理器会根据其中的小部件自动确定。
root = tk.Tk()
arr = [[1,0,0,1], [1,1,1,1], [1,1,1,0]]
for i in range(len(arr)):
for j in range(len(arr[i])):
if arr[i][j]==0:
w = tk.Label(root, text="red", bg="red", fg="white").grid(row=i, column=j)
elif arr[i][j]==1:
w = tk.Label(root, text="green", bg="green", fg="black").grid(row=i, column=j)
tk.mainloop()
结果:
请注意,小部件位于其单元格的中心。 粘性选项可更改此设置;此选项从集合N,S,E,W中获取一个或多个值。
示例:要将标签与左边框对齐,可以使用W(西)
在您的情况下:
w = tk.Label(root, text="red", bg="red", fg="white").grid(row=i, column=j, sticky=(W, E))
结果:
答案 2 :(得分:1)
使用grid()
布局而不是pack()
,您也可以使用place()
布局,但是您需要做很多工作。标签的大小也将有所不同,并且不会填充网格的整个单元格,为此使用sticky = 'nsew'
,这会拉伸Label
来填充单元格。
这是代码
我使用了enumerate()
函数,它返回数组的索引。
如果要拥有所有标签的对象,则可以创建列表或字典来分别访问它们。例如,在开头创建list
,然后在循环中对每个list.append(L)
执行Label
,以备将来参考。
import tkinter as tk
arr = [[1,0,0,1],
[1,1,1,1],
[1,1,1,0]]
root = tk.Tk()
for row , ar in enumerate(arr):
for col, color in enumerate(ar):
bg = 'green' if color else 'red'
fg = 'black' if color else 'white'
L = tk.Label(root, text=bg, bg=bg, fg=fg)
L.grid(row=row, column=col, sticky='nswe')
root.mainloop()
输出: