MyTetra Share
Делитесь знаниями!
Как написать программу на PyQT
09.08.2018
00:23
Раздел: Python - IDE - Qt

Как написать программу на PyQT

PyQT - это набор библиотек, позволяющий писать оконные приложения под windows и linux на Python. Чтобы начать писать программы на PyQT вам нужно сперва установить PyQT.Для установки в Python 3.6 достаточно в командной строке дать командуpip3 install pyqt5После установки PyQT в Windows в меню Пуск появится папка с его утилитами. Нам интересна утилита Designer которая позволяет создавать элементы оконного интерфейса с помощью простого перетаскивания их на форму приложения.


Писать мы будем программу для проверки доменов на занятость. Мы уже писали такую программу в консольном варианте вот в этой статье. Пришло время написать такую же программу с оконным интерфейсом.Установим модуль для проверки доменовpip3 install python-whoisОткроем из меню Пуск Designer и увидим такое окно

Ничего не меняя в настройках просто нажмем кнопку Создать - тем самым создадим главное окно нашей программы.

Слева есть список компонентов которые мы можем добавлять на форму простым перетаскиванием. У каждого добавленного на форму компонента есть свойства которые отображаются в списке справа, если добавить компонент на форму и выделить его.Накидаем интерфейс нашей программы для проверки доменов - в ней будут два многострочных текстовых поля (элемент TextEdit), две поясняющие надписи (Label) и одна кнопка (PushButton). Слева у нас должнен быть компонент с именем textEdit а справа textEdit_2.

Выделив главное окно поменяем ему заголовок в меню свойств справа - свойство WindowTitle.Изменим надписи на кнопках и Label просто щелкнув двойным щелчком по ним и вписав текст. Изменим размеры компонентов так как нам нужно. Сохраним файл как check.ui в папку с нашим будущим проектом

Теперь нам нужно конвертировать файл в модуль Python. Для этого в Windows в папке с проектом создаем .bat файл в котором пишем следующую строку


После запуска данного .bat файла в папке с проектом появляется файл check.py который является готовым модулем Python.

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

import sys

# Импортируем наш интерфейс

from check import *

from PyQt5 import QtCore, QtGui, QtWidgets


class MyWin(QtWidgets.QMainWindow):

def __init__(self, parent=None):

QtWidgets.QWidget.__init__(self, parent)

self.ui = Ui_MainWindow()

self.ui.setupUi(self)


# Здесь прописываем событие нажатия на кнопку

self.ui.pushButton.clicked.connect(self.DomainCheck)


# Пока пустая функция которая выполняется

# при нажатии на кнопку

def DomainCheck(self):

pass


if __name__=="__main__":

app = QtWidgets.QApplication(sys.argv)

myapp = MyWin()

myapp.show()

sys.exit(app.exec_())



Сохраним файл программы в папке с проектом и запустив увидим наше окно.


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

import sys

from check import *

from PyQt5 import QtCore, QtGui, QtWidgets


# Импортируем модули нужные для проверки доменов

import whois

import re


class MyWin(QtWidgets.QMainWindow):

def __init__(self, parent=None):

QtWidgets.QWidget.__init__(self, parent)

self.ui = Ui_MainWindow()

self.ui.setupUi(self)


# Этой строчкой мы вешаем на кнопку нашу новую функцию

# под названием DomainCheck

self.ui.pushButton.clicked.connect(self.DomainCheck)


# Собственно описываем функцию DomainCheck

# которая вызывается при нажатии кнопки

def DomainCheck(self):

# Очищаем текстовое поле с результатами

self.ui.textEdit_2.setText("")

# В переменную stroki получаем текст из левого поля ввода

stroki=self.ui.textEdit.toPlainText()

# Получаем массив строк разделив текст по знаку переноса строки

mas=stroki.split('\n')

# Обнуляем переменную где будут копиться свободные домены

rezultat='';

# Выводим надпись чтобы пользователь подождал

self.ui.textEdit_2.setText("Пожалуйста ждите, идет проверка!")

# Перебираем массив строчек с названиями доменов

for stroka in mas:

# В переменную domain кладем очищенное от лишних символов имя домена

domain = re.sub("^\s+|\n|\r|\s+$", '', stroka)

# Проверяем свободно ли данное доменное имя

m = whois.whois(domain)

# Если свободно то добавляем его в rezultat

if(m.status==None):

rezultat=rezultat+domain+'\n'

# Выводим в правое поле переменную rezultat со списком свободных доменов

self.ui.textEdit_2.setText(rezultat)


if __name__=="__main__":

app = QtWidgets.QApplication(sys.argv)

myapp = MyWin()

myapp.show()

sys.exit(app.exec_())



Прочитав комментарии в коде вы поймете каждую команду.Скачать исходники

Протестируем данную программу:


Если у вас есть Android телефон, вы можете скачать наш учебник по Python

 
MyTetra Share v.0.52
Яндекс индекс цитирования