На 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
Работает: