Границы с некоторых сторон
Я кодирую клиента для варианта крестики-нолики. Изменения логики игры не имеют отношения к этому вопросу
Я пытаюсь показать сетку крестиков-ноликов с хэштегом, как показано ниже.
Я изначально думал использовать границы на кнопках или рамки, содержащие кнопки, но другие вопросы нашли трудности (и пару сложных обходных путей) при добавлении границ к определенным сторонам.Я бы предпочел не прибегать к объекту Canvas
для рисования игра, так как это кажется - как и другие упомянутые-как дешевый обходной путь в ущерб удобочитаемости.
Как я могу добавить эти строки между рамками / столбцами сетки / метками / кнопками?
2 ответа:
Это можно сделать, поместив белые рамки внутри черных и используя аргументы
padx
иpady
изgrid
:import tkinter as tk root = tk.Tk() frame = tk.Frame(root, bg='black') frames = [] for i in range(3): frames.append([]) for j in range(3): frames[i].append(tk.Frame(frame, bg='white', width=50, height=50)) frames[i][j].grid(row=i, column=j, padx=((j != 0) * 2, (j != 2) * 2), pady=((i != 0) * 2, (i != 2) * 2)) frame.pack() root.mainloop()
padx
иpady
может либо взять одно число, чтобы получить симметричный результат, либо кортеж значений:padx=(<left>, <right>)
иpady=(<top>, <bottom>)
.
Как насчет чего-то вроде этого:
# I use python 2 import Tkinter as tk # For Python 3 use import tkinter as tk def create_grid(event=None): w = c.winfo_width() # Get current width of canvas h = c.winfo_height() # Get current height of canvas c.delete('grid_line') # Will only remove the grid_line # Creates all vertical lines at intevals of 100 except for first and last for i in range(100, w - 100, 100): c.create_line([(i, 0), (i, h)], tag='grid_line') # Creates all horizontal lines at intevals of 100 except for first and last for i in range(100, h - 100, 100): c.create_line([(0, i), (w, i)], tag='grid_line') root = tk.Tk() c = tk.Canvas(root, height=300, width=300, bg='white') c.pack(fill=tk.NONE, expand=True) c.bind('<Configure>', create_grid) root.mainloop()
Я взял Этот ответ и немного подправил его, чтобы края не были показаны