从this开始,我创建了一个类似网格的表格。 我已尝试根据列表[' 5'' 4',' 3',' 2'}将标签放在列中' 1&#39]。我得到的是标签的布局从顶部的1开始到5.我怎样才能将顺序从顶部的5开始反转到底部的1?
from tkinter import *
import random
# Create variables for these for the grid width/height
width = 5
height = ['5', '4', '3', '2', '1']
def fill_auto():
for i in range(1, 6):
rd_row = random.randrange(0, 5)
rd_col = random.randrange(0, width)
rd_num = random.randrange(50, 100)
print(rd_row, rd_col, rd_num)
# Set the label text
matrix[rd_row][rd_col].config(text=str(rd_num))
root = Tk()
root.geometry('+0+0')
root.configure(bg='black')
frame1 = Frame(root)
frame1.pack()
# Helper function to create a label
def make_label(x, y):
label_box = 'box' + str(y)
l = Label(frame1, width=5, relief='solid', text=label_box)
l.grid(column=x, row=y)
return l
# Using list comprehension to create 2d list
matrix = [[make_label(x, y) for x in range(width)] for y in height]
frame2 = Frame(root)
frame2.pack()
btn = Button(frame2, text='start', command=fill_auto)
btn.grid(row=0, column=0)
root.mainloop()
答案 0 :(得分:1)
在make_label
功能中,您使用y
标记文本和行号,因此当标签为5
时,它将会打开第五行。
相反,在matrix
变量中,第一行实际上包含编号最大的标签。您可以通过更改其中一个标签来查看:
matrix[1][1].config(text='test')
,毫不直观地说,产生了这个:
要使GUI的网格与matrix
一致,您可以在创建小部件方面做一些小改动:
# Helper function to create a label
def make_label(x, y, t):
label_box = 'box' + str(t)
l = Label(frame1, width=5, relief='solid', text=label_box)
l.grid(column=x, row=y)
return l
# Using list comprehension to create 2d list
matrix = [[make_label(x, y, t) for x in range(width)] for (y, t) in enumerate(height)]
产生这个: