Воз­можно, ты уже уме­ешь писать прос­тые сце­нарии на Python, но про­бовал ли ты делать гра­фичес­кие прог­раммы с нас­тоящи­ми работа­ющи­ми кно­поч­ками? Поверь, это тоже край­не увле­катель­но и не очень слож­но! Сегод­ня мы поп­ракти­куем­ся в этом, написав на Python и Qt прос­той поч­товик, который будет отправ­лять пись­ма с атта­чами.

Сра­зу ого­ворим­ся, что при­ложе­ние будет с рядом огра­ниче­ний: в час­тнос­ти, мы не будем даже прис­тупать к чте­нию поч­ты и не смо­жем выбирать поч­товый сер­вис для отправ­ки. К тому же пись­ма из самопаль­ного поч­товика могут чаще попадать в спам. Вос­при­нимай это ско­рее как учеб­ный при­мер, который поможет тебе осво­ить полез­ные навыки.

 

Интерфейс

Для начала давай соз­дадим интерфейс будуще­го при­ложе­ния. Для это­го вос­поль­зуем­ся фрей­мвор­ком для раз­работ­ки кросс‑плат­формен­ного ПО — Qt 5. Пот­ребу­ется ска­чать его и уста­новить.

От­кро­ем Qt Designer и в появив­шемся окне выбора пос­тавим галоч­ку на пун­кте Main Window.

Создание нового окна
Соз­дание нового окна

За­тем соз­дадим окно при помощи готовых инс­тру­мен­тов, а имен­но Label для тек­ста, Line Edit для строк вво­да, Text Edit для поля вво­да тек­ста, а так­же Push Button для кно­пок. Раз­ложить всё можешь так, как тебе пон­равит­ся, глав­ное — пос­тавить все эле­мен­ты, показан­ные на кар­тинке, и запом­нить их номера. Даль­ше будет понят­но, зачем это.

Интерфейс клиента
Ин­терфейс кли­ента

Не забудь в поле вво­да пароля пос­тавить параметр echoMode = Password, что­бы скрыть пароль, а так­же вык­лючить поля, которые могут быть активны толь­ко пос­ле пра­виль­ного вво­да дан­ных. Что­бы это сде­лать, необ­ходимо в поле enabled убрать галоч­ку.

Пос­ле завер­шения работы мое окно выг­лядит как на скрин­шоте.

Сох­раняй документ, и получишь файл с рас­ширени­ем ui, который и будет фай­лом интерфей­са. Я наз­вал его Main.ui. Теперь к коду!

Пер­вым делом импорти­руем две биб­лиоте­ки. Они нуж­ны для работы с Qt 5.

from PyQt5.QtWidgets import *
from PyQt5 import uic

Те­перь про­писы­ваем класс интерфей­са и в нем все фун­кции. У нас будет фун­кция вво­да (login), фун­кция прик­репле­ния фай­ла (attach_sth) и фун­кция отправ­ки сооб­щений (send_mail). Так­же в осно­ве основ лежит фун­кция вызова гра­фичес­кого интерфей­са с демонс­тра­цией окна и акти­ваци­ей трех кно­пок.

class MyGUI(QMainWindow):
def __init__(self):
super(MyGUI, self).__init__()
uic.loadUi('Main.ui', self)
self.show()
self.pushButton.clicked.connect(self.login)
self.pushButton_2.clicked.connect(self.attach_sth)
self.pushButton_3.clicked.connect(self.send_mail)
def login(self):
pass
def attach_sth(self):
pass
def send_mail(self):
pass
app = QApplication([])
windows = MyGUI()
app.exec_()

Здесь инте­рес­на фун­кция app.exec_(). Она оста­нав­лива­ет работу с тер­миналом, что­бы все вза­имо­дей­ствие с при­ложе­нием шло толь­ко через гра­фичес­кий интерфейс.

Код уже мож­но запус­тить! Ты уви­дишь окно с нарисо­ван­ным тобой интерфей­сом, но в нем пока что ничего не будет работать. Конеч­но, мы же еще не опре­дели­ли, как это дол­жно про­исхо­дить.

 

Пишем основную часть

Итак, задача — написать дви­жок. Прис­тупим.

Продолжение доступно только участникам

Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее

Вариант 2. Открой один материал

Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.


Валерий Линьков

Валерий Линьков

Дипломированный специалист Cisco, инструктор Cisco Networking Academy, основатель первой в Москве академии Cisco на базе предприятия, автор технических статей посвящённых национальной безопасности России, сисадмин, ИБшник, питонист, гик

Check Also

Magentная аномалия. Настраиваем ngnix для работы с Magento

По настройке сервера nginx созданы тысячи мануалов, но иногда случаются ситуации, не описа…

Подписаться
Уведомить о
1 Комментарий
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии