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