Менеджер геометрии tkinter .grid () не выводит правильный серийный номер кадра - PullRequest
0 голосов
/ 28 мая 2020

Я хотел иметь три Frame (s), чтобы сделать таблицу кнопок. Но я не мог придумать, как заставить это хоть как-то работать. Изменение серийного номера кадров все испортит.

  1. Во-первых, каждая кнопка получит свой Frame - ForEach() метод.

  2. Во-вторых, каждая строка будет соответствовать методу Frame - ForEachRow().

  3. В-третьих, все строки и столбцы находятся в одном методе Frame - ForWhole().

Но когда я запускаю код, результат показывает изображение ниже вывод кода . Я просто не понимаю порядок таблицы в выводе. Потому что я хочу, чтобы

  1. ForEach() было вверху, а затем
  2. ForEachRow() и
  3. ForWhole() внизу.

Но если я изменю порядковый номер таблиц в моем коде, то первая строка или столбец будет отделена от красный или желтый таблицы или от обоих .

Этот вид вывода показывает, когда серийный номер ForWhole() -> ForEach() -> ForEachRow() испорченный вывод . Что происходит с этим кодом?

ForWhole() -> ForEachRow() -> ForEach дает этот вывод

import tkinter as tk

window = tk.Tk()

row = int(input("Enter the number of row: "))
col = int(input("Enter the number of cols: "))

def ForEach():
    for i in range(row):
        for j in range(col):
            frame3 = tk.Frame(
                master=window,
                relief=tk.RIDGE,
                borderwidth=5,
                bg="red",
            )
            frame3.grid(row=i,column=j)
            button = tk.Button(
                relief=tk.RAISED,
                master=frame3,
                text=f"Row {i}\nColumn {j}",
                bg="cyan",
            )
            button.pack()

def ForEachRow():
    for i in range(row):
        frame1 = tk.Frame(
            master=window,
            relief=tk.RIDGE,
            borderwidth=5,
            bg="yellow",
        )
        frame1.grid(row=i)
        for j in range(col):
            button = tk.Button(
                relief=tk.RIDGE,
                master=frame1,
                text=f'Row {i}\nColumn {j}',
                bg="cyan"
            )
            button.grid(row=i,column=j)

def ForWhole():
    frame2 = tk.Frame(
        master = window,
        relief=tk.RIDGE,
        borderwidth=5,
        bg="blue"
    )
    frame2.grid()
    for i in range(row):
        for j in range(col):
            button = tk.Button(
                relief=tk.RAISED,
                master=frame2,
                text=f"Row {i}\nColumn {j}",
                bg="cyan",
            )
            button.grid(row=i,column=j)
ForEach()
ForEachRow()
ForWhole()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...