Обложка Python не для чайников: изучаем GUI!

Python не для чайников: изучаем GUI!

Евгений Кулаков

0% прочитано
Стандартный
Евгений Кулаков

Python не для чайников: изучаем GUI!

Глава 1

Основные компоненты и методы Tkinter (доп.материалы)

Для работы Tkinter обязательно запускать цикл обработки событий: root.mainloop(). Без него интерфейс не будет реагировать на действия пользователя. (пишем в самом конце)

Все примеры предполагают, что импортирована библиотека:

В прошлой книге мы изучали программирование в терминале, то-есть все наши программы были консольными. Теперь же мы изучим создание экранных приложений. Для начала мы... откроем Pycharm, а дальше... От чего же оттолкнуться? Давайте напишем экранную версию Hello World! с кнопочками:

Ну и как всегда, давайте импортируем необходимые библиотеки, а точнее библиотеку tkinter.

Теперь создадим поле для работы - главное окно (смотрите в доп.материалах)

Назовём нашу программу и отобразим её название сверху:

А теперь время кнопочек:) Там наверху есть подсказки

Не забываем разместить кнопку на экране:

Получилось как-то так:

Вы не переживайте, сейчас всё исправим (это я про click). Дело в том, что сlick это функция, которую мы должны создать (мы изучали функции в прошлой книге). Функцию мы создадим сразу после импорта, перед созданием окна. Напомню, что функции нужно создавать перед их вызовом.

Если что-то не поняли, то посмотрите доп. материалы сверху.

Запускаем! И... что-то не работает, хм... что же мы забыли? Давайте вернёмся наверх и посмотрим доп.материалы.

Ага! Мы забыли запустить цикл...

...

А теперь вишенка на торте! Запускаем цикл!

Глава 1. Загадка сфинкса...

Загадочное начало, не так ли? В этой главе мы разработаем свою собственную мини игру на python, только вместо pygame у нас будет tkinter. Приступим?

Что самое главное в игре загадки сфинкса? Конечно же, это загадки! Но какая это будет игра, если здесь нет картинок! Мы же не в прошлом веке:) Поэтому займёмся именно ними! Подсказки наверху. Перед разработкой скачайте в интернете картинку сфинкса и бросьте в корень проекта.

Получается как-то так, но знаете, вместо PhotoImage можно использовать другой метод, чтобы подходили все расширения, давайте попробуем установить библиотеку Pillow, разработанную специально для взаимодействия с изображениями. Пишем в терминал: pip install pillow (обычно сокращается как PIL, но при установке обязательно пишем pillow)

Кстати, хотел вам рассказать об одном интересном свойстве, но для начала обусловлюсь, что картинки не виджеты, поэтому их нельзя разместить на нашей рабочей поверхности, и поэтому мы вложем картинку в название (вот именно и это свойство - в tkinter, label может выступать не только названием, но и картинкой)

Здесь вместо текста во втором параметре (я про label) мы пишем другой параметр - image, и присваиваем ему картинку. А с размещением всё и так понятно:) Повторяю, если вы что-то не поняли то поднимайтесь на вверх к доп.материалам. Давайте запустим нашу программу:

Всё работает, но мы забыли кое-какую важную деталь, название игры. Назовём её... Riddles of the Sphinx, название конечно банальное, но для примера подойдёт.

Ну а теперь нам нужно поле для ввода ответа.

А теперь научим сфинкса загадывать загадки. Не будем изобретать велосипед и воспользуемся виджетом label

Riddle мы заменим, но пока, давайте придумаем сами загадки!

Вот вам пару загадок:

Кто не дышит, но живёт; хоть не нужно — много пьёт; и в жизни, и в смерти тело как лёд

Ответ: рыба.

Что имеет ключи, но не открывает замков?

Ответ: пианино.

Я говорю без рта и слышу без ушей. У меня нет тела, но я оживаю с ветром. Кто я?

Ответ: эхо.

Чем больше ты берёшь, тем больше оставляешь позади. Что это?

Ответ: шаги (или следы).

Что поднимается вверх и опускается вниз, но остаётся на месте?

Ответ: лестница.

У меня есть города, но нет домов. Есть леса, но нет деревьев. Есть реки, но нет воды. Что я?

Ответ: карта.

Что можно увидеть с закрытыми глазами?

Ответ: сон.

Что становится мокрым, когда высыхает?

Ответ: полотенце.

Что идёт без ног и стучит без рук?

Ответ: дождь.

Что всегда перед тобой, но ты его не видишь?

Ответ: будущее.

Что можно сломать, даже не касаясь?

Ответ: обещание.

Давайте составим что-то вроде списка, только прямо в коде программы (в дальнейшем мы перенесём загадки в отдельный файл)...

Загадки пишем сверху. Теперь давайте разбираться с riddle. Заменим его на riddles[0][0]. А точнее на первый элемент первой строки ([]-строка []-элемент)

Создадим поле и для ввода ответа от пользователя и кнопку для проверки ответа:

Создадим функцию check_answer. В ней мы должны проверить верен ли ответ, но только как это сделать? Для начала вспомним тот момент где мы загадывали загадку, помните про список? Давайте попробуем сравнить верен ли элемент списка [0][1] c ответом пользователя.

Пишем после списка загадок.

Вроде работает:)

Спасибо за чтение

Вернуться к книге