如何从列表中定位python小部件标签?

时间:2018-05-24 10:51:01

标签: python python-3.x tkinter

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()

1 个答案:

答案 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)]

产生这个: