Как мне использовать разделитель tkinter (или другой инструмент) здесь?

#python #tkinter #sudoku

Вопрос:

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

И я хочу создать разделители для просмотра сетки (чтобы четко видеть 9 случаев, в каждом из которых 9 чисел), возможно, используя функцию ttk.Separator. Но мне не удается «привязать» его к сетке … Плюс мне понадобится несколько из них. Как мне следует поступить ?

Если это полезно, есть код, который реализует мои заявки на участие. У меня есть большая функция, которая присваивает каждой записи номер, используя переменные v, столбец и строку.

 class Input():
    def __init__(self, row, column):
    global v
    v = StringVar()
    self.row = row
    self.column = column
    self.entry = Entry(root, text=v, width=2, justify="center", insertofftime=0, font="Century 20").grid(
        row=row 1, column=column 1, ipadx=13, ipady=13, padx=1, pady=1)

def value_def(self, deflt):
    v.set(deflt)
 

Комментарии:

1. разделитель должен быть в отдельной сетке, поэтому это невозможно сделать, не изменив вашу фактическую сетку.

2. Вы имеете в виду размещение моих столбцов судоку в столбце 1,2,3 5,6,7 9,10,11 в сетке, чтобы у меня был пустой столбец, который я мог бы использовать ? Уже сделано размещение пустых кадров в этих пустых столбцах, новые кадры позиционируются в уже используемом столбце, как если бы пустого столбца не было

3. Затем укажите ширину и высоту (а также цвет фона) этих кадров, в противном случае они будут иметь нулевой размер.

4. при использовании сетки размер строк и столбцов равен размеру большего элемента в этих строках/столбцах. Если вы используете пустую рамку в сетке, рамка не будет занимать места, а значит, и сетка, если вы не укажете ее размер.

Ответ №1:

Вместо разделителя используйте рамку с черным фоном и используйте отступы, чтобы оставить пробелы между строками и столбцами.

Вот пример, иллюстрирующий эту технику. Сначала я создаю класс для определения одной сетки 3х3, а затем создаю сетку экземпляров класса 3х3. Это ни в коем случае не единственный способ решить эту проблему, но он показывает, как это выглядит, когда вы добавляете пространство между элементами grid .

 import tkinter as tk

class SmallGrid(tk.Frame):
    def __init__(self, parent):
        super().__init__(parent, background="black")
        self.entries = {}

        self.grid_rowconfigure((0,1,2), weight=1, uniform="equal")
        self.grid_columnconfigure((0,1,2), weight=1, uniform="equal")

        for row in (0, 1, 2):
            for column in (0, 1, 2):
                entry = tk.Entry(self, width=2, borderwidth=0)
                entry.grid(row=row, column=column, padx=2, pady=2, sticky="nsew")
                self.entries[row,column] = entry

root = tk.Tk()

root.grid_rowconfigure((0,1,2), weight=1, uniform="equql")
root.grid_columnconfigure((0,1,2), weight=1, uniform="equal")

groups = {}
for row in (0, 1, 2):
    for column in (0, 1, 2):
        group = SmallGrid(root)
        group.grid(row=row, column=column, padx=2, pady=2)
        groups[row, column] = group

root.mainloop()
 

скриншот