Как расположить метки виджета Python из списка? - PullRequest
0 голосов
/ 24 мая 2018

С это , я создал таблицу в виде сетки.Я попытался расположить метки в столбце в соответствии со списком ['5', '4', '3', '2', '1'].Что я получаю, так это то, что макет этикетки начинается с 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 голосов
/ 24 мая 2018

В вашей функции 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)]

, который производит это:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...