Воз­можно, ты уже уме­ешь писать прос­тые сце­нарии на 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

Хакеры.RU. Глава 0х07. Точка невозврата

Это восьмая глава приключенческо‑фантастической истории «Хакеры.RU». Каждую субботу мы пуб…

  • Подпишись на наc в Telegram!

    Только важные новости и лучшие статьи

    Подписаться

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