На Python в IDE Anjuta напишем программу с 9 кнопками - игру крестики нолики с современным стандартным графическим интерфейсом Gtk+ 3.

 Запустите IDE Anjuta, создайте новый проект.

Дайте проекту имя, например, pygtk007 и выберите папку для проекта.

В IDE Anjuta поверх главного окна в вашем проекте разместите контейнер сетку 3Х3, в ячейки сетки разместите 9 кнопок.

Главному окну присвойте идентификатор (ID), например, window. Каждой кнопке присвойте уникальный идентификатор (ID), например, but0 ...but8. На той же  панели Widgets на вкладке свойства Общие каждой кнопке присвойте уникальное Имя виджета, например, 0 ... 8. На той же  панели Widgets на вкладке Сигналы для каждой кнопки задайте одно и то же имя обработчика сигнала clicked, например, on_click_btn

Откройте файл с программой на Python pygtk007.py, удалите весь имеющийся код и замените его на следующий:

#!/usr/bin/env python
# -*- Mode: Python; coding: utf-8; indent-tabs-mode: t; c-basic-offset: 4; tab-width:$

import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk, GdkPixbuf, Gdk
import os, sys

UI_FILE = "pygtk007.ui"

myGame = [-1, -1, -1, -1, -1, -1, -1, -1, -1]
nextMove = True
youWin = False

def doMove(self, button):
        global nextMove, myGame, youWin, window
        if (myGame[int(button.get_name())] == -1) and (not youWin) :
                if nextMove:
                        button.set_label('X')
                        myGame[int(button.get_name())] = 1
                else:
                        button.set_label('O')
                        myGame[int(button.get_name())] = 0
                nextMove = not nextMove
                window.set_title("Ходит " + ("X" if nextMove else "O"))
                if (
                    myGame[0]==myGame[1]==myGame[2]!=-1 or
                        myGame[3]==myGame[4]==myGame[5]!=-1 or
                        myGame[6]==myGame[7]==myGame[8]!=-1 or
                        myGame[0]==myGame[3]==myGame[6]!=-1 or
                        myGame[1]==myGame[4]==myGame[7]!=-1 or
                        myGame[2]==myGame[5]==myGame[8]!=-1 or
                        myGame[0]==myGame[4]==myGame[8]!=-1 or
                        myGame[2]==myGame[4]==myGame[6]!=-1
                        ):
                                window.set_title("You WIN!")
                                youWin = True
                if (not myGame.count(-1) and not youWin) :
                        window.set_title("Game over")
                        myGame = [-1, -1, -1, -1, -1, -1, -1, -1, -1]
                        for i in range(9):
                                but[i].set_label(' ')

class GUI:
        def on_click_btn (self, button):
                doMove(self, button)

        def on_window_destroy(self, window):
                Gtk.main_quit()

builder = Gtk.Builder()
builder.add_from_file(UI_FILE)
builder.connect_signals(GUI())
window = builder.get_object('window')
window.set_border_width(3)
but = [builder.get_object('but0'), builder.get_object('but1'),
       builder.get_object('but2'), builder.get_object('but3'),
       builder.get_object('but4'), builder.get_object('but5'),
       builder.get_object('but6'), builder.get_object('but7'),
       builder.get_object('but8')]
window.show_all()
Gtk.main()
sys.exit()

Сохраните весь проект. Теперь можно запускать программу через терминал в папке src вашего проекта:

dior@U18pro:~/Python/Anjuta/pygtk007/src$ ./pygtk007.py

Работает: