Напишем на Python с графической библиотекой tkinter программу (заготовку) шаблон для логических игр c прямоугольным полем. В качестве клеток на поле будем использовать кнопки (класс Button).
Перечислим примеры логических игр на поле в клетку:
- Шашки,
 - Шахматы,
 - Го,
 - Уголки,
 - Крестики нолики,
 - Линии (Lines98),
 - Пазлы - головоломки:
- Пятнашки,
 - Что ест уж,
 - Чайный сервиз,
 
 - Flip-Flop,
 - Memory,
 - Сапёр,
 - Пег,
 - Игры с цифрами:
- 2048
 - Судоку
 - Number Match
 
 - Трубопровод...
 
Для создания компьютерных игр в клетку, где в качестве клеток будут использоваться кнопки напишем программу на языке программирования Python с использованием графической библиотеки tkinter.
Импорт библиотек
from tkinter import *               # графическая библиотека
from random import shuffle          # перемешать список suffle(A)
Tk()                                # главное окно программы
mainloop()                          # главный цикл программы
Лист. 1.
Конструктор Tk

Рис. 1.
Фкнкция mainloop
В конце программы с графической библиотекой tkinter
Конструктор Button
from tkinter import *               # графическая библиотека
from random import shuffle          # перемешать список suffle(A)
Button()                            # конструктор кнопки
mainloop()                          # главный цикл программы
Лист. 2.

Рис. 2.
Метод pack
from tkinter import *               # графическая библиотека
from random import shuffle          # перемешать список suffle(A)
Button().pack()
mainloop()                          # главный цикл программы
Лист. 3.

Рис. 3.
from tkinter import *               # графическая библиотека
from random import shuffle          # перемешать список suffle(A)
Button().pack()
Button().pack()
Button().pack()
mainloop()                          # главный цикл программы
Лист. 4.
 
Рис. 4.
Параметры метода pack
from tkinter import *               # графическая библиотека
from random import shuffle          # перемешать список suffle(A)
Button().pack(expand=YES)
Button().pack(expand=YES)
Button().pack(expand=YES)
mainloop()                          # главный цикл программы
Лист. 5.
 
Рис. 5.
from tkinter import *               # графическая библиотека
from random import shuffle          # перемешать список suffle(A)
Button().pack(expand=YES, fill=BOTH)
Button().pack(expand=YES, fill=BOTH)
Button().pack(expand=YES, fill=BOTH)
mainloop()                          # главный цикл программы
Лист. 6.

Рис. 6.
from tkinter import *               # графическая библиотека
from random import shuffle          # перемешать список suffle(A)
Button().pack(expand=YES, fill=BOTH, side=LEFT)
Button().pack(expand=YES, fill=BOTH, side=LEFT)
Button().pack(expand=YES, fill=BOTH, side=LEFT)
mainloop()                          # главный цикл программы
Лист. 7.
 
Рис. 7.
Фреймы
from tkinter import *               # графическая библиотека
from random import shuffle          # перемешать список suffle(A)
Frame().pack(expand=YES, fill=BOTH) # Фрейм
Button().pack(expand=YES, fill=BOTH, side=LEFT)
Button().pack(expand=YES, fill=BOTH, side=LEFT)
Button().pack(expand=YES, fill=BOTH, side=LEFT)
mainloop()                          # главный цикл программы
Лист. 8.

Рис. 8.
Именованные объекты
from tkinter import *               # графическая библиотека
from random import shuffle          # перемешать список suffle(A)
f = Frame()                         # Фрейм
f.pack(expand=YES, fill=BOTH)       # Вывод фрейма на экран
Button(f).pack(expand=YES, fill=BOTH, side=LEFT)
Button(f).pack(expand=YES, fill=BOTH, side=LEFT)
Button(f).pack(expand=YES, fill=BOTH, side=LEFT)
mainloop()                          # главный цикл программы
Лист. 9.
 
Рис. 9.
Параметры конструктора Button
from tkinter import *               # графическая библиотека
from random import shuffle          # перемешать список suffle(A)
f = Frame()                         # Фрейм
f.pack(expand=YES, fill=BOTH)       # Вывод фрейма на экран
Button(f).pack(expand=YES, fill=BOTH, side=LEFT)
Button(f).pack(expand=YES, fill=BOTH, side=LEFT)
Button(f).pack(expand=YES, fill=BOTH, side=LEFT)
f = Frame()                         # Фрейм
f.pack(expand=YES, fill=BOTH)       # Вывод фрейма на экран
Button(f).pack(expand=YES, fill=BOTH, side=LEFT)
Button(f).pack(expand=YES, fill=BOTH, side=LEFT)
Button(f).pack(expand=YES, fill=BOTH, side=LEFT)
f = Frame()                         # Фрейм
f.pack(expand=YES, fill=BOTH)       # Вывод фрейма на экран
Button(f).pack(expand=YES, fill=BOTH, side=LEFT)
Button(f).pack(expand=YES, fill=BOTH, side=LEFT)
Button(f).pack(expand=YES, fill=BOTH, side=LEFT)
mainloop()                          # главный цикл программы
Лист. 10.

Рис. 10.
Цикл for
from tkinter import *               # графическая библиотека
from random import shuffle          # перемешать список suffle(A)
for i in range(3):
    f = Frame()                         # Фрейм
    f.pack(expand=YES, fill=BOTH)       # Вывод фрейма на экран
    Button(f).pack(expand=YES, fill=BOTH, side=LEFT)
    Button(f).pack(expand=YES, fill=BOTH, side=LEFT)
    Button(f).pack(expand=YES, fill=BOTH, side=LEFT)
mainloop()                          # главный цикл программы
Лист. 11. Устранение избыточности кода с помощью цикла for.

Рис. 11.
Вложенный цикл for
from tkinter import *               # графическая библиотека
from random import shuffle          # перемешать список suffle(A)
for i in range(3):
    f = Frame()                         # Фрейм
    f.pack(expand=YES, fill=BOTH)       # Вывод фрейма на экран
    for j in range(3):
        Button(f).pack(expand=YES, fill=BOTH, side=LEFT)
mainloop()
Лист. 12.

Рис. 12.
Глобальные переменные
from tkinter import *               # графическая библиотека
from random import shuffle          # перемешать список suffle(A)
column = 5                          # столбцы
row = 5                             # строки
for i in range(row):
    f = Frame()                         # Фрейм
    f.pack(expand=YES, fill=BOTH)       # Вывод фрейма на экран
    for j in range(column):
        Button(f).pack(expand=YES, fill=BOTH, side=LEFT)
mainloop()                          # главный цикл программы
Лист. 13.

Рис. 13.
Функция, определённая пользователем
from tkinter import *               # графическая библиотека
from random import shuffle          # перемешать список suffle(A)
column = 5                          # столбцы
row = 5                             # строки
def play():                        # функция обработчик нажатия на кнопку
    print("Нажал на кнопку")
for i in range(row):
    f = Frame()                         # Фрейм
    f.pack(expand=YES, fill=BOTH)       # Вывод фрейма на экран
    for j in range(column):
        Button(f, command = play).pack(expand=YES, fill=BOTH, side=LEFT)
mainloop()                          # главный цикл программы
Лист. 14.
=============== RESTART: /home/dior/Документы/Python/button/14.py ==============
Нажал на кнопку
Нажал на кнопку
Рис. 14.
Список объектов
from tkinter import *               # графическая библиотека
from random import shuffle          # перемешать список suffle(A)
column = 5                          # столбцы
row = 5                             # строки
btn = []
def play():                        # функция обработчик нажатия на кнопку
    print("Нажал на одну из ", len(btn), " кнопок")
for i in range(row):
    f = Frame()                         # Фрейм
    f.pack(expand=YES, fill=BOTH)       # Вывод фрейма на экран
    for j in range(column):
        btn += [Button(f, command = play)]
        btn[-1].pack(expand=YES, fill=BOTH, side=LEFT)
mainloop()                          # главный цикл программы
Лист. 15.
=============== RESTART: /home/dior/Документы/Python/button/15.py ==============
Нажал на одну из  25  кнопок
Нажал на одну из  25  кнопок
Нажал на одну из  25  кнопок
Рис. 15.
Свойство text у графических объектов
from tkinter import *               # графическая библиотека
from random import shuffle          # перемешать список suffle(A)
column = 5                          # столбцы
row = 5                             # строки
btn = []
def play():                         # функция обработчик нажатия на кнопку
    print("Нажал на одну из ", len(btn), " кнопок")
for i in range(row):
    f = Frame()                         # Фрейм
    f.pack(expand=YES, fill=BOTH)       # Вывод фрейма на экран
    for j in range(column):
        n = i * column + j
        btn += [Button(f, command=play, text=n)]
        btn[-1].pack(expand=YES, fill=BOTH, side=LEFT)
mainloop()                          # главный цикл программы
Лист. 16.

Рис. 16.
Метод config для графических объектов
from tkinter import *               # графическая библиотека
from random import shuffle          # перемешать список suffle(A)
column = 5                          # столбцы
row = 5                             # строки
btn = []
def play():                         # функция обработчик нажатия на кнопку
    print("Нажал на одну из ", len(btn), " кнопок")
for i in range(row):
    f = Frame()                         # Фрейм
    f.pack(expand=YES, fill=BOTH)       # Вывод фрейма на экран
    for j in range(column):
        n = i * column + j
        btn += [Button(f)]
        btn[n].pack(expand=YES, fill=BOTH, side=LEFT)
        btn[n].config(text=n)
        btn[n].config(command=play)
mainloop()                          # главный цикл программы
Лист. 17.
=============== RESTART: /home/dior/Документы/Python/button/17.py ==============
Нажал на одну из  25  кнопок
Нажал на одну из  25  кнопок
Нажал на одну из  25  кнопок
Рис. 17.
from tkinter import *               # графическая библиотека
from random import shuffle          # перемешать список suffle(A)
column = 5                          # столбцы
row = 5                             # строки
btn = []
def play(n):                         # функция обработчик нажатия на кнопку
    print("Нажал на кнопку ", n)
for i in range(row):
    f = Frame()                         # Фрейм
    f.pack(expand=YES, fill=BOTH)       # Вывод фрейма на экран
    for j in range(column):
        n = i * column + j
        btn += [Button(f)]
        btn[n].pack(expand=YES, fill=BOTH, side=LEFT)
        btn[n].config(text=n)
        btn[n].config(command=lambda n=n: play(n))
mainloop()                          # главный цикл программы
Лист. 18.
=============== RESTART: /home/dior/Документы/Python/button/18.py ==============
Нажал на кнопку  0
Нажал на кнопку  24
Нажал на кнопку  12
Нажал на кнопку  20
Нажал на кнопку  4
Нажал на кнопку  7
Рис. 18.
from tkinter import *               # графическая библиотека
from random import shuffle          # перемешать список suffle(A)
column = 3                          # столбцы
row = 3                             # строки
btn = []
playground = list('ЧТОЕСТЖУ ')      # виртуальное игровое поле
def play(n):                        # функция обработчик нажатия на кнопку
    btn[n].config(text=n)
for i in range(row):
    f = Frame()                     # Фрейм
    f.pack(expand=YES, fill=BOTH)   # Вывод фрейма на экран
    for j in range(column):
        n = i * column + j
        btn += [Button(f)]
        btn[n].pack(expand=YES, fill=BOTH, side=LEFT)
        btn[n].config(width=3, height=2)
        btn[n].config(text=playground[n])
        btn[n].config(command=lambda n=n: play(n))
mainloop()                          # главный цикл программы
Лист. 19.
 
Рис. 19.