Программы в питоне – Примеры программ | Python 3 для начинающих и чайников

Содержание

Пример программы на Python. Особенности, описание и рекомендации

Язык программирования Python является мощным инструментом, славится красивым синтаксисом и легкостью в обучении. Буквально любой пользователь сможет за короткое время изучить азы этого языка и написать свою первую программу. В этой статье мы рассмотрим примеры программ для начинающих на Python.

Почему Python?

У многих возникают сложности при выборе первого языка программирования. Вот несколько основных причин, почему стоит остановить свой выбор именно на нем:

  • Легкость в изучении. Действительно, Python является очень легким языком. Освоить основы можно буквально за неделю. Некоторые придерживаются мнения, что если человек первым своим языком для изучения выбирает Python, то ему в будущем будет сложно изучать другие языки. Но если человек совсем не понимает в программировании, не знает, как все работает, ему очень сложно будет изучать Java, например. Для начала пользователь должен понять основы программирования, узнать, что такое ООП, как с этим работать.
  • Перспектива. На сегодняшний день множество IT-компаний переходят на Python. Пишутся сайты, делаются расчеты, создаются боты. "Питон" справляется со всеми задачами. И хороший специалист в этой области точно не пропадет. Раньше об этом языке мало говорили, но сейчас даже в школах заменяют Pascal на Python. При сдаче ЕГЭ можно решать задачи на "Питоне".
  • Много обучающего материала. Разные курсы, книги, уроки, примеры программ. Даже можно найти примеры программ на Python для Raspberry Pi. Это такой микрокомпьютер, который часто используют для построения умных домов, автоматических систем.

Какую версию Python выбрать

Существует две версии Python - 2 и 3. Начинающие при скачивании Python задаются вопросом о том, какую же версию стоит скачивать. Вторая версия уже устарела, и мало кто ею пользуется. Большинство уроков и примеры программ на Python - 3 версия. И в этой статье также используется Python 3 в примерах. Синтаксис не особо отличается, но некоторые библиотеки не поддерживают старую версию, в некоторых отличается немного синтаксис. Поэтому не стоит тратить время на вторую версию, нужно сразу скачивать и изучать третью.

Самая первая программа

Такая традиция сложилась у программистов, что первой программой на любом языке программирования служит вывод текста Hello World!, что переводится с английского как «Привет, Мир!». Для осуществления этой задачи необходимо прописать лишь один оператор - print. И в скобках написать в кавычках текст, который нужно вывести на экран. Таким образом, первый наш пример программы на Python выглядит следующим образом:

print('Hello World!')

Любая программа работает по определенному алгоритму. Основными являются: линейный, разветвляющийся, циклический. Самый первый пример программы на Python, который был рассмотрен, то есть вывод текста, относится к линейному алгоритму. Зачастую в программах используются все виды алгоритмов. Ниже рассмотрим примеры простых программ на Python, относящихся к другим алгоритмам.

Ветвление

Ветвление, или же разветвляющийся алгоритм должен содержать хотя бы одну проверку условия. Для проверки условий в Python есть оператор if, что переводится как "если".

a=0
print('Введите число: ')
input(a)
if a==0:
	print('Вы ввели число 0')

В примере выше можно увидеть пример работы с оператором IF в Python. Сначала программа просит ввести число, далее пользователь вводит число (оператор input). Это число записывается в переменную a. Следующим идет условие, если переменная "a" равна нулю, то переменная выводит на экран текст, после чего работа программы прекращается. Также есть оператор else переводится как "иначе". Дополним нашу программу таким образом, что, если человек введет число, отличное от нуля, она оповестит пользователя об этом при помощи вывода текста. Итак, готовая программа выглядит следующим образом:

a=0
print('Введите число: ')
input(a)
if a==0:
	print('Вы ввели число 0')
else:
	print('Вы ввели число отличное от нуля')

Циклы в Python

Циклы служат для многократного повторения каких-либо действий. В Python для этого есть операторы for и while. Рассмотрим оба этих оператора.

Оператор While

Это циклы с условием, то есть тело цикла будет исполняться до того момента, пока условие истинно. Например, пока a = 0, прибавлять к переменной b переменную c.

Синтаксис выглядит следующим образом:

while условие:
	тело цикла

Пример программы на Python с использованием цикла While:

a = 1
while a <= 10:
    print(a ** 2)
    a += 1

Эта программа выводит квадраты чисел от 1 до 10. В теле цикла можно увидеть, что программа выводит каждый раз переменную a в квадрате, затем прибавляет к этой же переменной 1. Цикл выполняется до тех пор, пока переменная a не будет равна или больше 10. Чтобы программа выглядела более законченно и красиво, можно воспользоваться оператором else. Пример использования:

a = 1
while a <= 10:
    print(a ** 2)
    a += 1
else:
	print('Цикл завершен')

То есть если переменная a становится больше или равна 10, то на экран выводится сообщение "Цикл завершен". Добавили всего 2 строчки кода, а программа выглядит уже более красиво. Да и к тому же в будущем легче будет ориентироваться, если возникнет какая-нибудь ошибка, не придется долго искать.

Оператор For

Цикл For является менее универсальным, чем цикл While, но зато он работает быстрее. В основном при помощи for перебирают какие-либо данные. Например, строки и словари. Пример программы на Python:

for i in 'Hello world!':
	print(i * 2, end='')

В этом примере можно увидеть, что цикл for перебирает строку Hello World! и каждый символ строки повторяет два раза.

Операторы break и continue

Операторы break и continue используются в циклах для выхода из цикла или пропуска до следующей итерации. Пример использования оператора continue:

a = 1
while a <= 10:
    if a==5:
    	a += 1
    	continue
    
    print(a ** 2)
    a += 1
else:
	print('Цикл завершен')

В примере мы видим, что если переменная a равняется 5, то он пропускает 5 и начинает с 6. Так же применяется и оператор break, но вместо пропуска он будет выходить из цикла и переходить к другим действиям, если они есть. Если их нет - завершает программу.

Графический интерфейс программ

Далее пойдут примеры программ на Python с графическим интерфейсом. Для их создания потребуется набор библиотек PyQT5. Этот набор является одним из самых мощных для создания графического интерфейса программы. Также есть библиотека TKinter для создания графического интерфейса, но он уступает по мощности PyQT5, хотя для простых программ можно использовать и TKinter. Для начала следует установить эту библиотеку, так как изначально ее в Python нет.

Самый простой пример программы на Python с PyQT5:

#!/usr/bin/python3
# -*- coding: utf-8 -*-

import sys
from PyQt5.QtWidgets import QApplication, QWidget


if __name__ == '__main__':

    app = QApplication(sys.argv)

    w = QWidget()
    w.resize(250, 150)
    w.move(300, 300)
    w.setWindowTitle('Simple')
    w.show()

    sys.exit(app.exec_())

Все очень гибко настраивается, можно настроить ширину экрана, высоту, название окна и много другого. Ниже можно увидеть окно, которое создается после выполнения кода выше.

Пример использования библиотеки math

Язык программирования Python частенько используют для расчетов. Даже в NASA используют Python для таких целей. Чтобы проводить операции с числами, проводить различные расчеты, поможет библиотека math. Это очень мощная библиотека, которая изначально идет в составе "Питона", дополнительно устанавливать ее не надо. Рассмотрим пару примеров использования этой библиотеки.

Допустим, необходимо вычислить факториал заданного числа. Сделать это можно одним лишь оператором. Пример программы на Python:

import math
a=10
print(math.factorial(a))

Узнать остаток от деления a на b:

import math
a=10
b=2
print(math.fmod(a,b))

Допустим, нам нужно вычислить обратный гиперболический косинус числа B, делается это тоже с помощью одного оператора:

import math
a=10
print(math.acosh(a))

Построение графиков

Python также может составлять графики. Для этого используется библиотека MatPlotLib. Этой библиотеки нет изначально, ее надо устанавливать отдельно. Делается это очень просто, в командной строке нужно написать одну строчку:

pip install matplotlib

После чего стоит подождать некоторое время, пока библиотека не установится.

Пример кода для построения графиков синуса и косинуса:

import matplotlib as mpl 
import matplotlib.pyplot as plt 
import math

dpi = 80
fig = plt.figure(dpi = dpi, figsize = (512 / dpi, 384 / dpi) )
mpl.rcParams.update({'font.size': 10})

plt.axis([0, 10, -1.5, 1.5])

plt.title('Sine & Cosine')
plt.xlabel('x')
plt.ylabel('F(x)')

xs = []
sin_vals = []
cos_vals = []

x = 0.0 
while x < 10.0:
    sin_vals += [ math.sin(x) ]
    cos_vals += [ math.cos(x) ]
    xs += [x] 
    x += 0.1 

plt.plot(xs, sin_vals, color = 'blue', linestyle = 'solid',
         label = 'sin(x)')
plt.plot(xs, cos_vals, color = 'red', linestyle = 'dashed',
         label = 'cos(x)')

plt.legend(loc = 'upper right')
fig.savefig('trigan.png')
plt.show()

После выполнения кода можно увидеть следующее:

Django

На Python написано немало сайтов. Все больше и больше сайтов с каждым днем пишется на этом чудесном языке. А возможность этого предоставляет фреймворк Django. Даже предполагают, что через несколько лет Python сможет обогнать PHP на рынке. Многие IT-компании уже работают с этим языком. Например, "Яндекс". А известный облачный сервис Dropbox и вовсе полностью написан на "Питоне". Можно писать не только сайты, но и полноценные веб-приложения. К тому же он абсолютно бесплатный.

IDE для программирования на Python

Инструмент программиста - всегда важно. Согласитесь, неудобно программировать на языке программирования Python в блокноте, тем более учитывая, как "Питон" относится к отступам. Существует несколько сред разработки, которыми чаще всего пользуются:

  • PyCharm. Это, наверное, самый известный IDE для Python. С ним работать очень удобно, подключение новых библиотек не занимает много времени. Но он скорее подходит для мощных компьютеров, на слабых ПК будет очень неудобно с ним работать, так как PyCharm требователен.
  • Sublime Text 3. Это и не среда разработки, это редактор кода, но зато какой! Он идеально подходит для слабых компьютеров. Программные коды придется запускать через командную строку.
  • Eclipse. На нем чаще всего пишут программисты на Java, но и для Python он отлично подойдет.

Рекомендации

  • Не забывайте комментировать свой код. Многие не тратят на это время, а зря. Нужно заиметь привычку комментировать свой код, причем всегда. Например, если вы будете выкладывать свой пример программы на Python на какой-нибудь интернет-ресурс, нужно, чтобы другие программисты смогли понять ваш код, это очень важн

fb.ru

игры и сайты — Примеры известных проектов

Python входит в 5-ку самых популярных языков программирования. Он используется в самых разных областях IT, таких, как веб-разработка, машинное обучение, создание приложений и даже геймдев.

Где применяется Python

Python используется в разных областях программирования не просто так. Он прост в изучении, имеет приятный синтаксис и обладает достаточным для решения любых задач набором инструментов.

И хотя он не может потеснить Java и PHP с ведущих мест в веб-разработке, в сфере машинного обучения Python – язык номер один.

Создание приложений

Python можно использовать для разработки десктопных и мобильных приложений, для этого разработано много мощных инструментов. Однако крупные проекты зачастую не пишут только на одном Python полностью.

Python часто используется для разработки отдельных частей приложения, он позволяет создать простую систему моддинга. Благодаря высокой степени модульности, изменение одной части программы может не затрагивать другую.

Возможность встроить в Python код на С/C++ сглаживает проблему низкой скорости работы программ.

Можно и полностью разрабатывать полноценные приложения для мобильных устройств, используя фреймворки, например, Kivi.

Веб-разработка

Python захватил определенную часть сферы, но не может соперничать с такими гигантами, как PHP, Java и Node.js. Для реализации серверной логики они удобнее и мощнее Python.

На Python часто создаются решения, которые имеют узкую направленность. Например, отправку документа с сайта на принтер трудно реализовать на PHP, а Python легко справляется с этой задачей.

Python проигрывает, потому что он является языком общего назначения, PHP – это инструмент, заточенный только под веб-программирование, а Java уже давно используется в вебе.

Машинное обучение

Искусственный интеллект с каждым годом становится лучше, ученые одержимы идеей создать суперкомпьютер, превосходящий человека во всем.

Python стал абсолютным лидером в этой сфере по ряду причин:

  • Язык очень простой, это нравится ученым. Им не нужно тратить много времени на написание кода, вместо этого они могут сосредоточиться на проектировании ИИ.
  • В Python легко встраивается код на C и C++, что позволяет использовать C-код в тех местах, где важна скорость.
  • Python обзавелся достаточным количеством библиотек и фреймворков, созданных для упрощения машинного обучения.
  • Гибкость языка позволяет не ограничиваться какой-то одной парадигмой разработки, программист может писать как объектно-ориентированные программы, так и процедурные.

Интересные проекты на Python

Разработок много, но не все из них можно назвать успешными, однако есть проекты, заслуживающие внимания. Рассмотрим примеры известных программ, игр и сайтов написанных на Python.

Игры

На Python написаны сотни арканоидов, платформеров и других маленьких проектов, но, чтобы оценить возможности языка, следует рассмотреть большие разработки.

Mount and Blade

Mount and blade – это RPG, у которой нет аналогов. Игрок погружается в средневековый мир, путешествует по глобальной карте, набирает армию и завоевывает себе славу и власть. Когда начинается битва, игра превращается в средневековый симулятор сражений, игрок управляет персонажем от третьего лица, у него есть несколько десятков воинов, которым можно отдавать приказы, и он должен убить всех воинов противника.

Такой системы нет ни в одной игре. Стратегия, RPG и экшн — странная, но крутая смесь. Кроме того, на поле боя может быть несколько сотен воинов, управляемых компьютером, такой масштаб впечатляет.

Все скрипты написаны на Python. Игра отлично работает на слабых машинах. Особенность Python — возможность сделать проект модульным. Энтузиасты без проблем могут сделать дополнения для игры, изменить какую-то механику, текстуры и анимации, эти изменения никак не коснутся системных файлов игры.

Battlefield

Battlefield полюбили миллионы человек. Не стоит думать, что игра полностью написана на Python. Разработчики использовали его для создания некоторых скриптов, серверной части игры и её логики.

Игра вышла в 2005 году и имела подходящие для компьютеров того времени системные требования. Использование Python позволило ускорить разработку и не повлияло на производительностью

EVE Online

Как и в случае с Battlefield, в EVE Online Python использовался для создания игровой логики и управления серверной частью игры.

Разработчики использовали улучшенную версию интерпретатора, которая называется stackless python. Так как это ММО, сервер может обрабатывать миллионы запросов, и stackless python отлично справляется с этим.

Sims 4

Sims – это самый известный симулятор жизни.

Игра была на слуху около 4 лет, освещалась на различных событиях, занимала топы и, конечно, успешно продавалась. Чтобы дать игрокам больше контента и возможностей, разработчики использовали Python для реализации игрового моддинга, что позволило без проблем расширять игру с помощью дополнительного контента.

Civilization 4

Про цивилизацию слышал каждый геймер. Это глобальная пошаговая стратегия, сочетающая в себе дипломатию, развитие и войну.

Разработчики не ограничились использованием Python для реализации каких-то частей проекта, они написали на нём практически всю игру.

Программы

BitTorrent

Популярный торрент-клиент, которым пользуются миллионы людей, был полностью написан на Python.

Примечание: 6 версия программы была переписана на C++.

Blender

Это программа для работы с 3D графикой, способная соперничать с такими гигантами, как Maya и 3DMax.

Пользователь получает возможность создавать трехмерные модели, анимацию, а также видео и игры.

Главное преимущества программы заключается в том, что она распространяется бесплатно. Blender постоянно улучшается, дополняется с помощью различных расширений, получает все больше поддержки в виде видео-уроков и обучающих статей.

Python используется для создания логики, импорта и экспорта, автоматического выполнения задач и работы инструментов.

GIMP

GIMP является редактором растровой графики и, частично, векторной графики.

Он является единственной достойной заменой Adobe Photoshop в системе Linux и установлен на большинстве дистрибутивов по умолчанию.

Python использовали для создания фильтров, дополнительных модулей, некоторых скриптов.

Anki

Программа, которая использует метод интервальных повторений, чтобы пользователь мог легко запомнить нужную информацию (новые слова, формулы, ответы на тесты и другое).

Calibre

Любимое приложение каждого, кто читает много книг.

Программа позволяет просматривать, конвертировать и редактировать книги различных форматов, кроме того она поддерживает прямую работу с различными электронными книгами.

Искусственный интеллект

Python — лидер в сфере машинного обучения. Он может быть как основным языком проекта, так и использоваться в отдельных модулях.

Наиболее популярными являются ИИ, работающие с фотографиями и видео (поиск по фото, редактирование видео и фото, сопоставление различных фото и так далее). Программисты даже могут научить компьютер определять эмоциональное состояние человека по фотографии, хотя есть еще некоторые проблемы, связанные с индивидуальными особенностями мимики разных людей.

Обилие библиотек позволяет без проблем создавать ИИ, способные ориентироваться в пространстве, принимать решения, выполнять задачи, недоступные человеку.

Одним из новейших искуственных интеллектов, написанных на Python, является AlphaStar – искусственный интеллект для Starcraft 2.

Разработчики использовали PySC2 — инструменты, написанные на Python специально для SC2.

Сложность заключается в том, что компьютеру нужно делать и оценивать много вещей: разведывать противника, определять его стратегию, подстраивать свою игру под неё, принимать оптимальные решения по передвижению армии и многое другое.

AlphaStar – это нейросеть, которая улучшает сама себя. Сначала разработчики «показывали» ей записи игр, а позже выпустили играть с обычными игроками.

AlphaStar показал поразительные результаты, он обыграл одного из лучших игроков мира.

Сайты

Для работы с сайтами используют обычно фреймворк Django, превращающий Python в язык для веб-программирования.

Google

Это самая популярная поисковая система в мире.

Каждый день через сервера Google проходит огромный объем трафика, который обрабатывается и направляется с помощью Python.

YouTube

Это сайт, где пользователи могут загружать и смотреть видеоролики.

Он известен каждому пользователю интернета и ежедневно собирает миллиарды просмотров.

Facebook

Это самая популярная социальная сеть в мире, ежедневно пользователи загружаются миллионы картинок, меняют статусы, создаются посты — всё это обрабатывается с помощью инструментов языка Python.

Instagram

Популярная социальная сеть, которая используется людьми, чтобы делится историями из жизни, фотографиями, мыслями и так далее.

Всё, что связано с картинками (поиск, постинг, просмотр) обрабатывается кодом на Python.

Потенциал Python в крупных проектах

Python часто используют для прототипирования программ, позже они переписываются на другие языки программирования. Это очень удобно, потому что разработка таких прототипов очень быстрая, также она помогает понять, как будет выглядеть программа. На другой язык проект переписывается из-за низкой скорости выполнения кода на Python.

Да, этот язык можно использовать во всех крупных проектах, как инструмент для создания прототипов, но как насчет применения в финальной версии?

Если не рассматривать машинное обучение, и брать программы, которым жизненно важна скорость выполнения, то вряд ли для Python найдется место. Однако часто практикуется гибрид разных языков, например, Python и C++. Такой подход позволяет достичь и высокой скорости разработки и высокой скорости выполнения программы. На Python пишется большая часть кода, а на C++ лишь те участки, которые сильно влияют на скорость выполнения (например, функция по обработке и передаче большого количества данных в единицу времени).

all-python.ru

Первая программа. Среда разработки IDLE

Сегодня мы напишем свою первую программу в среде разработки IDLE.

После загрузки и установки python открываем IDLE (среда разработки на языке Python, поставляемая вместе с дистрибутивом).

Здесь и далее буду приводить примеры под ОС Windows, так как именно она у меня сейчас под рукой.

Запускаем IDLE (изначально запускается в интерактивном режиме), после чего уже можно начинать писать первую программу. Традиционно, первой программой у нас будет "hello world".

Чтобы написать "hello world" на python, достаточно всего одной строки:

print("Hello world!")

Вводим этот код в IDLE и нажимаем Enter. Результат виден на картинке:

Поздравляю! Вы написали свою первую программу на python! (если что-то не работает).

С интерактивным режимом мы немного познакомились, можете с ним ещё поиграться, например, написать

print(3 + 4)
print(3 * 5)
print(3 ** 2)

Но, всё-таки, интерактивный режим не будет являться основным. В основном, вы будете сохранять программный код в файл и запускать уже файл.

Для того, чтобы создать новое окно, в интерактивном режиме IDLE выберите File → New File (или нажмите Ctrl + N).

В открывшемся окне введите следующий код:

name = input("Как Вас зовут? ")
print("Привет,", name)

Первая строка печатает вопрос ("Как Вас зовут? "), ожидает, пока вы не напечатаете что-нибудь и не нажмёте Enter и сохраняет введённое значение в переменной name.

Во второй строке мы используем функцию print для вывода текста на экран, в данном случае для вывода "Привет, " и того, что хранится в переменной "name".

Теперь нажмём F5 (или выберем в меню IDLE Run → Run Module) и убедимся, что то, что мы написали, работает. Перед запуском IDLE предложит нам сохранить файл. Сохраним туда, куда вам будет удобно, после чего программа запустится.

Вы должны увидеть что-то наподобие этого (на скриншоте слева - файл с написанной вами программой, справа - результат её работы):

Поздравляю! Вы научились писать простейшие программы, а также познакомились со средой разработки IDLE. Теперь можно немного отдохнуть, а потом начать изучать python дальше. Можете посмотреть синтаксис python, циклы или условия. Желаю удачи!

pythonworld.ru

Python | Первая программа

Первая программа на Python

Последнее обновление: 24.01.2019

После установки интерпретатора, как было описано в прошлой теме, мы можем начать создавать приложения на Python. Итак, создадим первую простенькую программу.

Как было сказано в прошлой теме, программа интерпретатора, если при установке не был изменен адрес, по умолчанию устанавливается на Linux по пути usr/local/bin/python37, а на Windows по пути C:\Users\[имя_пользователя]\AppData\Local\Programs\Python\Python37\ и представляет файл под названием python.exe.

Запустим интерпретатор и введем в него следующую строку:


print("hello world")

И консоль выведет строку "hello world":

Для этой программы использовался метод print(), который выводит некоторую строку на консоль.

Создание файла программы

В реальности, как правило, программы определяются во внешних файлах-скриптах и затем передаются интерпретатору на выполнение. Поэтому создадим файл программы. Для этого на диске C или где-нибудь в другом месте файловой системы определим для скриптов папку python. А в этой папке создадим новый текстовый файл, который назовем hello.py. По умолчанию файлы с кодом на языке Python, как правило, имеют расширение py.

Откроем этот файл в любом текстовом редакторе и добавим в него следующий код:


name = input("Введите имя: ")
print("Привет,", name)

Скрипт состоит из двух строк. Первая строка с помощью метода input() ожидает ввода пользователем своего имени. Введенное имя затем попадает в переменную name.

Вторая строка с помощью метода print() выводит приветствие вместе с введенным именем.

Теперь запустим командную строку/терминал и с помощью команды cd перейдем к папке, где находится файл с исходным кодом hello.py (например, в моем случае это папка C:\python). Далее вначале введем полный путь к интерпретатору, а затем полный путь к файлу скрипта:

К примеру, в моем случае в консоль надо будет вести:


C:\Users\Eugene\AppData\Local\Programs\Python\Python37\python.exe hello.py

Но если при установке была указана опция "Add Python 3.7 to PATH", то есть путь к интерпретатору Python был добавлен в переменные среды, то вместо полного пути к интерпретатору можно просто написать python:

Варианты с обоими способами запуска:

В итоге программа выведет приглашение к вводу имени, а затем приветствие.

metanit.com

Python 3 для начинающих и чайников

Язык программирования Python 3 — это мощный инструмент для создания программ самого разнообразного назначения, доступный даже для новичков. С его помощью можно решать задачи различных типов.

Этот сайт призван помочь начинающим и чайникам научиться программировать на python 3. Также здесь можно подробнее узнать об особенностях функционирования этого языка.

Язык Python обладает некоторыми примечательными особенностями, которые обуславливают его широкое распространение. Поэтому прежде чем изучать python, следует рассказать о его достоинствах и недостатках.

Python 3: преимущества и недостатки языка

  1. Python - интерпретируемый язык программирования. С одной стороны, это позволяет значительно упростить отладку программ, с другой - обуславливает сравнительно низкую скорость выполнения.
  2. Динамическая типизация. В python не надо заранее объявлять тип переменной, что очень удобно при разработке.
  3. Хорошая поддержка модульности. Вы можете легко написать свой модуль и использовать его в других программах.
  4. Встроенная поддержка Unicode в строках. В Python необязательно писать всё на английском языке, в программах вполне может использоваться ваш родной язык.
  5. Поддержка объектно-ориентированного программирования. При этом его реализация в python является одной из самых понятных.
  6. Автоматическая сборка мусора, отсутствие утечек памяти.
  7. Интеграция с C/C++, если возможностей python недостаточно.
  8. Понятный и лаконичный синтаксис, способствующий ясному отображению кода. Удобная система функций позволяет при грамотном подходе создавать код, в котором будет легко разобраться другому человеку в случае необходимости. Также вы сможете научиться читать программы и модули, написанные другими людьми.
  9. Огромное количество модулей, как входящих в стандартную поставку Python 3, так и сторонних. В некоторых случаях для написания программы достаточно лишь найти подходящие модули и правильно их скомбинировать. Таким образом, вы можете думать о составлении программы на более высоком уровне, работая с уже готовыми элементами, выполняющими различные действия.
  10. Кроссплатформенность. Программа, написанная на Python, будет функционировать совершенно одинаково вне зависимости от того, в какой операционной системе она запущена. Отличия возникают лишь в редких случаях, и их легко заранее предусмотреть благодаря наличию подробной документации.

Изучение языка программирования python - это просто и понятно даже для чайников. Уже сейчас вы можете скачать python и написать свою первую программу!

Также у нас появился самоучитель Python, собранный из материалов данного сайта. Удачного изучения Python!

pythonworld.ru

Ваша первая программа на Python — Погружение в Python 3

Не убегайте от проблем, не осуждайте себя и не несите своё бремя в праведном безмолвии. У вас есть проблема? Прекрасно! Это пойдёт на пользу! Радуйтесь: погрузитесь в неё и исследуйте!

Досточтимый Хенепола Гунаратана

Погружение

Обычно книги о программировании начинаются с кучи скучных глав о базовых вещах постепенно переходят к созданию чего-нибудь полезного. Давайте всё это пропустим. Вот вам готовая, работающая программа на Python. Возможно, вы ровным счётом ничего в ней не поймёте. Не беспокойтесь об этом, скоро мы разберём её строчка за строчкой. Но сначала прочитайте код и посмотрите, что вы сможете извлечь из него.

SUFFIXES = {1000: ['KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'],
            1024: ['KiB', 'MiB', 'GiB', 'TiB', 'PiB', 'EiB', 'ZiB', 'YiB']}

def approximate_size(size, a_kilobyte_is_1024_bytes=True):
    '''Преобразует размер файла в удобочитаемую для человека форму.

    Ключевые аргументы:
    size -- размер файла в байтах
    a_kilobyte_is_1024_bytes -- если True (по умолчанию), используются степени 1024
                                если False, используются степени 1000

    Возвращает: текстовую строку (string)

    '''
    if size < 0:
        raise ValueError('число должно быть неотрицательным')

    multiple = 1024 if a_kilobyte_is_1024_bytes else 1000
    for suffix in SUFFIXES[multiple]:
        size /= multiple
        if size < multiple:
            return '{0:.1f} {1}'.format(size, suffix)

    raise ValueError('число слишком большое')

if __name__ == '__main__':
    print(approximate_size(1000000000000, False))
    print(approximate_size(1000000000000))

Теперь давайте запустим эту программу из командной строки. В Windows это будет выглядеть примерно так:

c:\home\diveintopython3\examples> c:\python31\python.exe humansize.py
1.0 TB
931.3 GiB

В Mac OS X и Linux, будет почти то же самое:

[email protected]:~/diveintopython3/examples$ python3 humansize.py
1.0 TB
931.3 GiB

Что сейчас произошло? Вы выполнили свою первую программу на Python. Вы вызвали интерпретатор Python в командной строке и передали ему имя скрипта, который хотели выполнить. В скрипте определена функция approximate_size(), которая принимает точный размер файла в байтах и вычисляет «красивый» (но приблизительный) размер. (Возможно, вы видели это в Проводнике Windows, в Mac OS X Finder, в Nautilus, Dolphin или Thunar в Linux. Если отобразить папку с документами в виде таблицы, файловый менеджер в каждой её строке покажет иконку, название документа, размер, тип, дату последнего изменения и т. д. Если в папке есть 1093-байтовый файл с названием «TODO», файловый менеджер не покажет «TODO 1093 байта»; вместо этого он скажет что-то типа «TODO 1 КБ». Именно это и делает функция approximate_size().)

Посмотрите на последние строки скрипта, вы увидите два вызова print(approximate_size(аргументы)). Это вызовы функций. Сначала вызывается approximate_size(), которой передаётся несколько аргументов, затем берётся возвращённое ею значение и передаётся прямо в функцию print(). Функция print() встроенная, вы нигде не найдёте её явного объявления. Её можно только использовать, где угодно и когда угодно. (Есть множество встроенных функций, и ещё больше функций, которые выделены в отдельные модули. Терпение, непоседа.)

Итак, почему при выполнении скрипта в командной строке, всегда получается один и тот же результат? Мы ещё дойдём до этого. Но сначала давайте посмотрим на функцию approximate_size().

Объявление функций

В Python есть функции, как и в большинстве других языков, но нет ни отдельных заголовочных файлов, как в C++, ни конструкций interface/implementation, как в Паскале. Когда вам нужна функция, просто объявите её, например, так:

def approximate_size(size, a_kilobyte_is_1024_bytes=True):

Когда вам нужна функция, просто объявите её.

Объявление начинается с ключевого слова def, затем следует имя функции, а за ним аргументы в скобках. Если аргументов несколько, они разделяются запятыми.

К тому же, стоит заметить, что в объявлении функции не задаётся тип возвращаемых данных. Функции в Python не определяют тип возвращаемых ими значений; они даже не указывают, существует ли возвращаемое значение вообще. (На самом деле, любая функция в Python возвращает значение; если в функции выполняется инструкция return, она возвращает указанное в этой инструкции значение, если нет — возвращает None — специальное нулевое значение.)

В некоторых языках программирования функции (возвращающие значение) объявляются ключевым словом function, а подпрограммы (не возвращающие значений) — ключевым словом sub. В Python же подпрограмм нет. Все функции возвращают значение (даже если оно None), и всегда объявляются ключевым словом def.

Функция approximate_size() принимает два аргумента: size и kilobyte_is_1024_bytes, но ни один из них не имеет типа. В Python тип переменных никогда не задаётся явно. Python вычисляет тип переменной и следит за ним самостоятельно.

В Java и других языках со статической типизацией необходимо указывать тип возвращаемого значения и каждого аргумента функции. В Python явно указывать тип, для чего-либо, не нужно. Python самостоятельно отслеживает типы переменных на основе присваиваемых им значений.

Необязательные и именованные аргументы

В Python аргументы функций могут иметь значения по умолчанию; если функция вызывается без аргумента, то он принимает своё значение по умолчанию. К тому же, аргументы можно указывать в любом порядке, задавая их имена.

Давайте ещё раз посмотрим на объявление функции approximate_size():

def approximate_size(size, a_kilobyte_is_1024_bytes=True):

Второй аргумент — a_kilobyte_is_1024_bytes — записывается со значением по умолчанию True. Это означает, что этот аргумент необязательный; можно вызвать функцию без него, а Python будет действовать так, как будто она вызвана с True в качестве второго параметра.

Теперь взглянем на последние строки скрипта:

if __name__ == '__main__':
    print(approximate_size(1000000000000, False))  ①
    print(approximate_size(1000000000000))         ②

Функция approximate_size() вызывается с двумя аргументами. Внутри функции approximate_size() переменная a_kilobyte_is_1024_bytes будет False, поскольку False передаётся явно во втором аргументе.
Функция approximate_size() вызывается только с одним аргументом. Но всё в порядке, потому что второй аргумент необязателен! Поскольку второй аргумент не указан, он принимает значение по умолчанию True, как определено в объявлении функции.

А ещё можно передавать значения в функцию по имени.

>>> from humansize import approximate_size
>>> approximate_size(4000, a_kilobyte_is_1024_bytes=False)       ①
'4.0 KB'
>>> approximate_size(size=4000, a_kilobyte_is_1024_bytes=False)  ②
'4.0 KB'
>>> approximate_size(a_kilobyte_is_1024_bytes=False, size=4000)  ③
'4.0 KB'
>>> approximate_size(a_kilobyte_is_1024_bytes=False, 4000)       ④
  File "<stdin>", line 1
SyntaxError: non-keyword arg after keyword arg
>>> approximate_size(size=4000, False)                           ⑤
  File "<stdin>", line 1
SyntaxError: non-keyword arg after keyword arg

Перевод сообщений оболочки:
  Файл "<stdin>", строка 1
SyntaxError: неименованный аргумент после именованного
Функция approximate_size() вызывается со значением 4000 в первом аргументе и False в аргументе по имени a_kilobyte_is_1024_bytes. (Он стоит на втором месте, но это не важно, как вы скоро увидите.)
Функция approximate_size() вызывается со значением 4000 в аргументе по имени size и False в аргументе по имени a_kilobyte_is_1024_bytes. (Эти именованные аргументы стоят в том же порядке, в каком они перечислены в объявлении функции, но это тоже не важно.)
Функция approximate_size() вызывается с False в аргументе по имени a_kilobyte_is_1024_bytes и 4000 в аргументе по имени size. (Видите? Я же говорил, что порядок не важен.)
Этот вызов не работает, потому что за именованным аргументом следует неименованный (позиционный). Если читать список аргументов слева направо, то как только встречается именованный аргумент, все следующие за ним аргументы тоже должны быть именованными.
Этот вызов тоже не работает, по той же причине, что и предыдущий. Удивительно? Ведь сначала передаётся 4000 в аргументе по имени size, затем, «очевидно», можно ожидать, что False станет аргументом по имени a_kilobyte_is_1024_bytes. Но в Python это не работает. Раз есть именованный аргумент, все аргументы справа от него тоже должны быть именованными.

Написание читаемого кода

Не буду растопыривать перед вами пальцы и мучить длинной лекцией о важности документирования кода. Просто знайте, что код пишется один раз, а читается многократно, и самый важный читатель вашего кода — это вы сами, через полгода после написания (т. е. всё уже забыто, и вдруг понадобилось что-то починить). В Python писать читаемый код просто. Используйте это его преимущество и через полгода вы скажете мне «спасибо».

Строки документации

Функции в Python можно документировать, снабжая их строками документации (англ. documentation string, сокращённо docstring). В нашей программе у функции approximate_size() есть строка документации:

def approximate_size(size, a_kilobyte_is_1024_bytes=True):
    '''Преобразует размер файла в удобочитаемую для человека форму.

    Ключевые аргументы:
    size -- размер файла в байтах
    a_kilobyte_is_1024_bytes -- если True (по умолчанию), используются степени 1024
                                если False, используются степени 1000

    Возвращает: текстовую строку (string)

    '''

Каждая функция заслуживает хорошую документацию.

Тройные кавычки[1] используются для задания строк[2] содержащих многострочный текст. Всё, что находится между начальными и конечными кавычками, является частью одной строки данных, включая переводы строк, пробелы в начале каждой строки текста, и другие кавычки. Вы можете использовать их где угодно, но чаще всего будете встречать их в определениях строк документации.

Тройные кавычки — это ещё и простой способ определить строку, содержащую одинарные (апострофы) и двойные кавычки, подобно qq/.../ в Perl 5.

Всё, что находится в тройных кавычках, — это строка документации функции, описывающая, что делает эта функция. Строка документации, если она есть, должна начинать тело функции, т. е. находится на следующей строчке сразу под объявлением функции. Строго говоря, вы не обязаны писать документацию к каждой своей функции, но всегда желательно это делать. Я знаю, что вам уже все уши прожужжали про документирование кода, но Python даёт вам дополнительный стимул — строки документации доступны во время выполнения как атрибут функции.

Многие IDE для Python используют строки документации для отображения контекстной справки, и когда вы набираете название функции, её документация появляется во всплывающей подсказке. Это может быть невероятно полезно, но это всего лишь строки документации, которые вы сами пишете.

Путь поиска оператора import

Перед тем, как идти дальше, я хочу вкратце рассказать о путях поиска библиотек. Когда вы пытаетесь импортировать модуль (с помощью оператора import), Python ищет его в нескольких местах. В частности, он ищет во всех директориях, перечисленных в sys.path. Это просто список, который можно легко просматривать и изменять при помощи стандартных списочных методов. (Вы узнаете больше о списках в главе Встроенные типы данных.)

>>> import sys                                                 ①
>>> sys.path                                                   ②
['',
 '/usr/lib/python31.zip',
 '/usr/lib/python3.1',
 '/usr/lib/python3.1/[email protected]@',
 '/usr/lib/python3.1/lib-dynload',
 '/usr/lib/python3.1/dist-packages',
 '/usr/local/lib/python3.1/dist-packages']
>>> sys                                                        ③
<module 'sys' (built-in)>
>>> sys.path.insert(0, '/home/mark/diveintopython3/examples')  ④
>>> sys.path                                                   ⑤
['/home/mark/diveintopython3/examples',
 '',
 '/usr/lib/python31.zip',
 '/usr/lib/python3.1',
 '/usr/lib/python3.1/[email protected]@',
 '/usr/lib/python3.1/lib-dynload',
 '/usr/lib/python3.1/dist-packages',
 '/usr/local/lib/python3.1/dist-packages']

Импортирование модуля sys делает доступными все его функции и атрибуты.
sys.path — список имён директорий, определяющий текущий путь поиска. (Ваш будет выглядеть иначе, в зависимости от вашей операционной системы, от используемой версии Python и от того, куда он был установлен.) Python будет искать в этих директориях (в заданном порядке) файл с расширением «.py», имя которого совпадает с тем, что вы пытаетесь импортировать.
Вообще-то я вас обманул; истинное положение дел немного сложнее, потому что не все модули лежат в файлах с расширением «.py». Некоторые из них, как, например, модуль sys, являются встроенными; они впаяны в сам Python. Встроенные модули ведут себя точно так же, как обычные, но их исходный код недоступен, потому что они не были написаны на Python! (Модуль sys написан на Си.)
Можно добавить новую директорию в путь поиска, добавив имя директории в список sys.path, во время выполнения Python, и тогда Python будет просматривать её наравне с остальными, как только вы попытаетесь импортировать модуль. Новый путь поиска будет действителен в течение всего сеанса работы Python.
Выполнив команду sys.path.insert(0, новый_путь), вы вставили новую директорию на первое место в список sys.path, и, следовательно, в начало пути поиска модулей. Почти всегда, именно это вам и нужно. В случае конфликта имён (например, если Python поставляется со 2-й версией некоторой библиотеки, а вы хотите использовать версию 3) этот приём гарантирует, что будут найдены и использованы ваши модули, а не те, которые идут в комплекте с Python.

Всё является объектом

Если вы вдруг пропустили, я только что сказал, что функции в Python имеют атрибуты, и эти атрибуты доступны во время выполнения. Функция, как и всё остальное в Python, является объектом.

Запустите интерактивную оболочку Python и повторяйте за мной:

>>> import humansize                               ①
>>> print(humansize.approximate_size(4096, True))  ②
4.0 KiB
>>> print(humansize.approximate_size.__doc__)      ③
Преобразует размер файла в удобочитаемую для человека форму.

    Ключевые аргументы:
    size -- размер файла в байтах
    a_kilobyte_is_1024_bytes -- если True (по умолчанию), используются степени 1024
                                если False, используются степени 1000

    Возвращает: текстовую строку (string)

Первая строчка импортирует программу humansize в качестве модуля — фрагмента кода, который можно использовать интерактивно или из другой Python-программы. После того, как модуль был импортирован, можно обращаться ко всем его публичным функциям, классам и атрибутам. Импорт применяется как в модулях, для доступа к функциональности других модулей, так и в интерактивной оболочке Python. Это очень ва

pep8.ru

PyQt5: первые программы | Python 3 для начинающих и чайников

Я начинаю перевод серии уроков PyQt5 от zetcode.

PyQt5 - это набор Python библиотек для создания графического интерфейса на базе платформы Qt5 от компании Digia.

Он доступен для Python 2.x и 3.x. Этот учебник использует Python 3.

Библиотека Qt является одной из самых мощных библиотек GUI (графического интерфейса пользователя).

Установить PyQt5 на Windows можно с официального сайта библиотеки.

Установить PyQt5 на linux-системы можно с помощью любого менеджера пакетов:

sudo apt-get install python3-pyqt5 pyqt5-dev-tools

PyQt5 реализован в виде набора python-модулей. Эта библиотека имеет более 620 классов и 6000 функций и методов.

Это мультиплатформенная библиотека, которая работает на всех основных операционных системах, в том числе Unix, Windows и Mac OS.

Простой пример

Это простой пример, показывающий небольшое окно. Тем не менее, мы можем многое сделать с этим окном. Мы можем изменить его размер, развернуть его или свернуть. Это требует написания значительного объёма кода. Однако кто-то уже запрограммировал эту функциональность до нас. Поскольку эта функциональность повторяется в большинстве приложений, нет необходимости писать её снова.

PyQt5 является инструментом высокого уровня. Если бы мы писали это на более низком уровне, следующий пример кода легко мог бы растянуться на сотни строк:

#!/usr/bin/python3
# -*- coding: utf-8 -*-

import sys
from PyQt5.QtWidgets import QApplication, QWidget


if __name__ == '__main__':

    app = QApplication(sys.argv)

    w = QWidget()
    w.resize(250, 150)
    w.move(300, 300)
    w.setWindowTitle('Simple')
    w.show()

    sys.exit(app.exec_())

Приведенный выше код показывает небольшое окно на экране.

import sys
from PyQt5.QtWidgets import QApplication, QWidget

Здесь мы делаем необходимые импорты. Основные виджеты расположены в PyQt5.QtWidgets.

app = QApplication(sys.argv)

Каждое приложение PyQt5 должно создать объект приложения (экземпляр QApplication). Параметр sys.argv это список аргументов командной строки. Скрипты Python можно запускать из командной строки. Это способ, которым мы можем контролировать запуск наших сценариев.

w = QWidget()

Виджет QWidget это базовый класс для всех объектов интерфейса пользователя в PyQt5. Мы предоставляем конструктор по умолчанию для QWidget. Конструктор по умолчанию не имеет родителя. Виджет без родителей называется окно.

w.resize(250, 150)

Метод resize() изменяет размеры виджета. Он стал 250 пикселей в ширину и 150 в высоту.

w.move(300, 300)

Метод move() двигает виджет на экране на координату x=300, y=300.

w.setWindowTitle('Simple')

Здесь мы задаём заголовок нашего окна.

w.show()

Метод show() отображает виджет на экране. Виджет сначала создаётся в памяти, и только потом (с помощью метода show) показывается на экране.

sys.exit(app.exec_())

Наконец, мы попадаем в основной цикл приложения. Обработка событий начинается с этой точки. Основной цикл получает события от оконной системы и распределяет их по виджетам приложения. Основной цикл заканчивается, если мы вызываем метод exit() или главный виджет уничтожен. Метод sys.exit() гарантирует чистый выход. Вы будете проинформированы, как завершилось приложение.

Метод exec_ () имеет подчеркивание. Это происходит потому, что exec является ключевым словом в python 2.

Значок приложения

Значок приложения - небольшое изображение, которое обычно отображается в верхнем левом углу заголовка. В следующем примере мы покажем, как сделать это в PyQt5. Мы также представим некоторые новые методы.

Не забудьте также скачать какую-нибудь иконку 🙂

#!/usr/bin/python3
# -*- coding: utf-8 -*-

import sys
from PyQt5.QtWidgets import QApplication, QWidget
from PyQt5.QtGui import QIcon


class Example(QWidget):

    def __init__(self):
        super().__init__()

        self.initUI()


    def initUI(self):

        self.setGeometry(300, 300, 300, 220)
        self.setWindowTitle('Icon')
        self.setWindowIcon(QIcon('web.png'))

        self.show()


if __name__ == '__main__':

    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())

Предыдущий пример был написан в процедурном стиле. Язык программирования Python поддерживает как процедурный, так и объектно-ориентированный стили программирования. Программирование в PyQt5 означает программирование в ООП.

class Example(QWidget):

    def __init__(self):
        super().__init__()
        ...

Три важные вещи в объектно-ориентированном программировании это классы, данные и методы. Здесь мы создаем новый класс Example. Класс Example наследуется от класса QWidget. Это означает, что мы вызываем два конструктора: первый для класса Example и второй для родительского класса. Функция super() возвращает родительский объект Example с классом, и мы вызываем его конструктор.

self.initUI()

Создание GUI делегируется методу initUI().

self.setGeometry(300, 300, 300, 220)
self.setWindowTitle('Icon')
self.setWindowIcon(QIcon('web.png'))

Все три метода были унаследованы от класса QWidget.

Метод setGeometry() делает две вещи: помещает окно на экране и устанавливает его размер. Первые два параметра х и у - это позиция окна. Третий - ширина, и четвертый - высота окна. На самом деле, он сочетает в себе методы resize() и move() в одном методе.

Последний метод устанавливает иконку приложения. Чтобы сделать это, мы создали объект QIcon. QIcon получает путь к нашей иконке для отображения.

if __name__ == '__main__':

    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())

Создаются объекты application и Example. Запускается основной цикл.

Подсказки

Мы можем предоставить всплывающую подсказку для любого из виджетов.

#!/usr/bin/python3
# -*- coding: utf-8 -*-

import sys
from PyQt5.QtWidgets import (QWidget, QToolTip,
    QPushButton, QApplication)
from PyQt5.QtGui import QFont


class Example(QWidget):

    def __init__(self):
        super().__init__()

        self.initUI()


    def initUI(self):

        QToolTip.setFont(QFont('SansSerif', 10))

        self.setToolTip('This is a <b>QWidget</b> widget')

        btn = QPushButton('Button', self)
        btn.setToolTip('This is a <b>QPushButton</b> widget')
        btn.resize(btn.sizeHint())
        btn.move(50, 50)

        self.setGeometry(300, 300, 300, 200)
        self.setWindowTitle('Tooltips')
        self.show()


if __name__ == '__main__':

    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())

В этом примере мы покажем подсказку для двух виджетов PyQt5.

QToolTip.setFont(QFont('SansSerif', 10))

Этот статический метод устанавливает шрифт, используемый для отображения подсказки. Мы используем шрифт 10px SansSerif.

self.setToolTip('This is a <b>QWidget</b> widget')

Чтобы создать всплывающую подсказку, мы вызываем метод setToolTip(). Мы можем использовать форматирование текста.

btn = QPushButton('Button', self)
btn.setToolTip('This is a <b>QPushButton</b> widget')

Мы создаем виджет кнопки и устанавливаем подсказку для него.

btn.resize(btn.sizeHint())
btn.move(50, 50)

Меняем размер кнопки и перемещаем относительно окна. Метод sizeHint() дает рекомендуемый размер для кнопки.

Закрытие окна

Очевидный способ закрыть окно, это нажать на крестик. В следующем примере мы покажем, как мы можем программно закрыть наше окно. Мы кратко рассмотрим сигналы и слоты.

#!/usr/bin/python3
# -*- coding: utf-8 -*-

import sys
from PyQt5.QtWidgets import QWidget, QPushButton, QApplication
from PyQt5.QtCore import QCoreApplication


class Example(QWidget):

    def __init__(self):
        super().__init__()

        self.initUI()


    def initUI(self):

        qbtn = QPushButton('Quit', self)
        qbtn.clicked.connect(QCoreApplication.instance().quit)
        qbtn.resize(qbtn.sizeHint())
        qbtn.move(50, 50)

        self.setGeometry(300, 300, 250, 150)
        self.setWindowTitle('Quit button')
        self.show()


if __name__ == '__main__':

    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())

В этом примере, мы создаем кнопку выхода. После нажатия на кнопку, приложение завершается.

qbtn = QPushButton('Quit', self)

Мы создаем кнопку. Кнопка является экземпляром класса QPushButton. Первый параметр конструктора - название кнопки. Вторым параметром является родительский виджет. Родительский виджет является виджетом Example, который наследуется от QWidget.

qbtn.clicked.connect(QCoreApplication.instance().quit)

Система обработки событий в PyQt5 построена на механизме сигналов и слотов. Если мы нажмем на кнопку, вызовется сигнал "нажатие". Слот может быть слот Qt или любая Python функция.

QCoreApplication содержит главный цикл обработки; он обрабатывает и диспетчеризирует все события. Метод instance() дает нам его текущий экземпляр.

Обратите внимание, что QCoreApplication создается с QApplication. Сигнал "нажатие" подключен к методу quit(), который завершает приложение. Коммуникация осуществляется между двумя объектами: отправителя и приемника. Отправитель кнопка, приемник - объект приложения.

Message Box

По умолчанию, если мы нажмем на крестик, QWidget закрывается. Иногда мы хотим изменить это поведение по умолчанию, например, если у нас есть открытый файл, в котором мы сделали некоторые изменения. Мы показываем окно с сообщением для подтверждения действия.

#!/usr/bin/python3
# -*- coding: utf-8 -*-

import sys
from PyQt5.QtWidgets import QWidget, QMessageBox, QApplication


class Example(QWidget):

    def __init__(self):
        super().__init__()

        self.initUI()


    def initUI(self):

        self.setGeometry(300, 300, 250, 150)
        self.setWindowTitle('Message box')
        self.show()


    def closeEvent(self, event):

        reply = QMessageBox.question(self, 'Message',
            "Are you sure to quit?", QMessageBox.Yes |
            QMessageBox.No, QMessageBox.No)

        if reply == QMessageBox.Yes:
            event.accept()
        else:
            event.ignore()


if __name__ == '__main__':

    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())

Если мы закрываем QWidget, генерируется QCloseEvent. Чтобы изменить поведение виджета, нам нужно переопределить обработчик события closeEvent().

reply = QMessageBox.question(self, 'Message',
    "Are you sure to quit?", QMessageBox.Yes |
    QMessageBox.No, QMessageBox.No)

Мы показываем окно с сообщением и с двумя кнопками: Yes и No. Первая строка отображается в заголовке окна. Вторая строка является текстовым сообщением и отображается в диалоговом окне. Третий аргумент определяет комбинацию кнопок, появляющихся в диалоге. Последний параметр - кнопка по умолчанию. Это кнопка, на которой изначально установлен фокус клавиатуры. Возвращаемое значение хранится в переменной reply.

if reply == QtGui.QMessageBox.Yes:
    event.accept()
else:
    event.ignore()

Здесь мы проверяем возвращаемое значение. Если мы нажмем на кнопку Yes, мы принимаем событие, которое приводит к закрытию виджета и приложения. В противном случае мы будем игнорировать событие закрытия.

Центрирование окна на экране

Следующий скрипт показывает, как мы можем центрировать окно на рабочем столе.

#!/usr/bin/python3
# -*- coding: utf-8 -*-

import sys
from PyQt5.QtWidgets import QWidget, QDesktopWidget, QApplication


class Example(QWidget):

    def __init__(self):
        super().__init__()

        self.initUI()


    def initUI(self):

        self.resize(250, 150)
        self.center()

        self.setWindowTitle('Center')
        self.show()


    def center(self):

        qr = self.frameGeometry()
        cp = QDesktopWidget().availableGeometry().center()
        qr.moveCenter(cp)
        self.move(qr.topLeft())


if __name__ == '__main__':

    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())

Класс QtWidgets.QDesktopWidget предоставляет информацию о компьютере пользователя, в том числе о размерах экрана.

self.center()

Код, который будет центрировать окно, находится в нами созданном методе center().

qr = self.frameGeometry()

Мы получаем прямоугольник, определяющий геометрию главного окна. Это включает в себя любые рамки окна.

cp = QDesktopWidget().availableGeometry().center()

Мы получаем разрешение экрана нашего монитора. И с этим разрешением, мы получаем центральную точку.

qr.moveCenter(cp)

Наш прямоугольник уже имеет ширину и высоту. Теперь мы установили центр прямоугольника в центре экрана. Размер прямоугольника не изменяется.

self.move(qr.topLeft())

Мы двигаем верхний левый угол окна приложения в верхний левый угол прямоугольника qr, таким образом, центрируя окно на нашем экране.

В этой части урока PyQt5 мы рассмотрели некоторые основы.

pythonworld.ru

Отправить ответ

avatar
  Подписаться  
Уведомление о