Книга Программирование на Python3 с PyQt5 - читать онлайн бесплатно, автор Сергей Николаевич Талипов
bannerbanner
Вы не авторизовались
Войти
Зарегистрироваться
Программирование на Python3 с PyQt5
Программирование на Python3 с PyQt5
Добавить В библиотекуАвторизуйтесь, чтобы добавить
Оценить:

Рейтинг: 0

Добавить отзывДобавить цитату

Программирование на Python3 с PyQt5

Сергей Талипов

Программирование на Python3 с PyQt5

ЛЕКЦИЯ 1 – УСТАНОВКА PYTHON, БИБЛИОТЕК И IDE

1.1 Установка Python3








C:\Python35\

C:\Python35\Scripts\

1.2 Установка в Python библиотек Qt5, Spyder3 и других модулей



pip install PyQt5

pip install PyQt5-tools

pip install spyder


pip install pyperclip

pip install requests

pip install html2text

pip install beautifulsoup4

pip install wget

pip install python-docx

pip install XlsxWriter

pip install openpyxl

pip install Pillow

pip install selenium

pip install wheel

pip install pyinstaller

pip install pypiwin32

pip install pywin32-ctypes



1.3 Запуск стандартной графической оболочки IDLE


IDLE.bat:

@start /b C:\Python35\pythonw.exe "C:\Python35\Lib\idlelib\idle.pyw"


1.4 Запуск графической оболочки Spyder3


Spyder3.bat

@start /b C:\Python35\Scripts\spyder3.exe



1.5 Использование сторонней IDE PyCharm


JetBrains32.bat:

@start /b C:\PyCharm2018\bin\pycharm.exe


JetBrains64.bat:

@start /b C:\PyCharm2018\bin\pycharm64.exe




1.5.1 Настройка в PyCharm мастера для создания QtForm




 Form

 

  

   

    0

    0

    640

    480

   

  

  

   Form

  

 

 

 




1.5.2 Настройка для вызова внешнего редактора QtForm



C:\Python35\Lib\site-packages\pyqt5-tools\designer.exe

"$FilePath$"

$FileDir$



1.6 Компиляция в exe-файл


Чтобы перенести программу на другой компьютер, где не установлен Python, её нужно скомпилировать в .exe файл. Для этого есть несколько способов, и сегодня мы рассмотрим наиболее простой – библиотеку pyinstaller


Дадим в командной строке две команды:


pip install wheel

pip install pyinstaller

pip install pypiwin32

pip install pywin32-ctypes


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


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



D:

pyinstaller –onedir –onefile –name=myprogram "D:\1.py" –paths C:\Python35\Lib\site-packages\PyQt5\Qt\bin



Через некоторое время компиляция завершится и в подкаталоге dist появится EXE-шник


Некоторые ключи для компиляции:


--onefile – сборка в один файл, т.е. файлы .dll не пишутся

–-windowed -при запуске приложения, будет появляться консоль

–-noconsole – при запуске приложения, консоль появляться не будет

–-icon=app.ico – добавляем иконку в окно

–-paths – возможность вручную прописать путь к необходимым файлам, если pyinstaller

не может их найти (например: –paths C:\Python35\Lib\site-packages\PyQt5\Qt\bin)


1.7 Если поломался Python и не работает pip, spyder3 или pyinstaller


cmd

python -m pip install pip==9.0.1

pip uninstall spyder

pip install spyder

pip uninstall pyinstaller

pip install pyinstaller


1.8 Установка PyQt5 в Linux


sudo apt-get install qt5-default

sudo apt-get install qtcreator


ЛЕКЦИЯ 2 – ОСНОВНЫЕ ТИПЫ ДАННЫХ, УСЛОВИЯ И ОПЕРАЦИИ

К неизменяемым (immutable) типам относятся: целые числа (int),  числа с плавающей точкой (float), комплексные числа (complex), логические переменные (bool), кортежи (tuple), строки (str) и неизменяемые множества (frozen set).

К изменяемым (mutable) типам относятся: списки (list), множества (set), словари (dict).

2.1 Числовые и строковые переменные

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

Числа с плавающей запятой имеют ограниченную точность. Визуально разницу между целым числом и числом с плавающей запятой можно заметить в консоли по наличию точки: 1 – целое число, 1.0 – с плавающей запятой.

Комплексные числа записываются в форме x+yj, где x – действительная часть числа, а y – мнимая: c = 1+2j

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

Строка представляет собой последовательность символов. Можно использовать одинарные или двойные кавычки для создания строки.


# Это комментарий


box1 = 15

box2 = 25

box3 = box1 + box2

print(box3)

s1 = 'Вам: '

s2 = ' лет'

name = input('Введите ваше имя: ')

age = input('Введите сколько вам лет: ')

name = 'Вас зовут: ' + name

age2 = s1 + age + s2

print(name)

print(age2)

b = 100 – int(age)

f = 100.5 – float(age)

print('Вам осталось жить где-то: ' + str(b))

print('А точнее где-то: ' + str(f))


40

Введите ваше имя: tsn

Введите сколько вам лет: 43

Вас зовут: tsn

Вам: 43 лет

Вам осталось жить где-то: 57

А точнее где-то: 57.5


Список использованных команд:

   • print('Какой то текст') – печатает текст;

   • print(a) – печатает значение переменной a (вместо a может быть любое имя переменной);

   • a=input('Пояснение что надо ввести') – ожидает от пользователя ввода какого то значения и помещает его в переменную с типом строка (вместо a может быть любое имя переменной);

   • int(a) – преобразовывает переменную типа строка в число (вместо a может быть любое имя переменной);

   • str(i) – преобразовывает переменную числового типа в строку (вместо i может быть любое имя переменной).

2.1.1 Встроенные функции

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

Ряд встроенных функций, касающихся ввода-вывода и типов данных, мы уже использовали. Это print(), input(), int(), float(), str(). Рассмотрим другие встроенные функции:

print(ord('z')) # Код символа: 122

print(ord('ф')) # 1092


print(chr(87)) # Символ по коду: W

print(chr(10045)) # ✽


print(len('abc')) # Длина строки: 3

print(abs(-2.2)) # Модуль числа: 2.2


a = 10 / 3 # Вещественное деление: 3.3333333333333335

b = 10 % 3 # Остаток от целочисленного деления: 1

c = 10 // 3 # Деление нацело. Целая часть при делении: 3


print(a) # 3.3333333333333335

print(b) # 1

print(c) # 3


print(round(a, 2)) # Округление для двух знаков: 3.33

print(round(a)) # Округление до целого числа: 3


print("Number: %.2f" % a) # Number: 3.33


print(divmod(10, 3)) # Целая часть и остаток при целочисленном делении: (3, 1)


print(pow(2, 4)) # 2 в степени 4: 16

print(max(10, 12, 3)) # Макимальное число в списке: 12

print(min(10, 12, 3, 9)) # Манимальное число в списке: 3

print(sum((10, 12, 3, 10))) # Сумма чисел в списке: 35


2.1.2 Собственные функции

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


def pribavka(zarplata, avto):

    k = 0

    if (avto > 10):

        k = round((avto – 10) * 0.02 * zarplata)

    return k


a = int(input('Введите зарплату сотрудника: '))

b = int(input('Введите количество автомобилей проданных за месяц: '))

c = pribavka(a, b)

print('В этом месяце прибавка к зарплате составит: ' + str(c))


2.1.3 Функции математического модуля math

math.acos(X) – арккосинус X. В радианах

math.acosh(X) – вычисляет обратный гиперболический косинус

math.asin(X) – арксинус X. В радианах

math.asinh(X) – вычисляет обратный гиперболический синус

math.atan(X) – арктангенс X. В радианах

math.atan2(Y, X) – арктангенс Y/X. В радианах. С учетом четверти, в которой находится точка (X, Y)

math.atanh(X) – вычисляет обратный гиперболический тангенс

math.ceil(X) – округление до ближайшего большего числа

math.copysign(X, Y) – возвращает число, имеющее модуль такой же, как и у числа X, а знак – как у числа Y

math.cos(X) – косинус X (X указывается в радианах)

math.cosh(X) – вычисляет гиперболический косинус

math.degrees(X) – конвертирует радианы в градусы

math.e – e = 2,718281…

math.erf(X) – функция ошибок

math.erfc(X) – дополнительная функция ошибок (1 – math.erf(X))

math.exp(X) – eX

math.expm1(X) – eX – 1. При X → 0 точнее, чем math.exp(X)-1

math.fabs(X) – модуль X

math.factorial(X) – факториал числа X

math.floor(X) – округление вниз

math.fmod(X, Y) – остаток от деления X на Y

math.frexp(X) – возвращает мантиссу и экспоненту числа

math.fsum(последовательность) – сумма всех членов последовательности. Эквивалент встроенной функции sum(), но math.fsum() более точна для чисел с плавающей точкой

math.gamma(X) – гамма-функция X

math.hypot(X, Y) – вычисляет гипотенузу треугольника с катетами X и Y (math.sqrt(x * x + y * y))

math.isfinite(X) – является ли X числом

math.isinf(X) – является ли X бесконечностью

math.isnan(X) – является ли X NaN (Not a Number – не число)

math.ldexp(X, I) – X * 2i. Функция, обратная функции math.frexp()

math.lgamma(X) – натуральный логарифм гамма-функции X

math.log(X, [base]) – логарифм X по основанию base. Если base не указан, вычисляется натуральный логарифм

math.log10(X) – логарифм X по основанию 10

math.log1p(X) – натуральный логарифм (1 + X). При X → 0 точнее, чем math.log(1+X)

math.log2(X) – логарифм X по основанию 2

math.modf(X) – возвращает дробную и целую часть числа X. Оба числа имеют тот же знак, что и X

math.pi – pi = 3,1415926…

math.pow(X, Y) – XY

math.radians(X) – конвертирует градусы в радианы

math.sin(X) – синус X (X указывается в радианах)

math.sinh(X) – вычисляет гиперболический синус

math.sqrt(X) – квадратный корень из X

math.tan(X) – тангенс X (X указывается в радианах)

math.tanh(X) – вычисляет гиперболический тангенс

math.trunc(X) – усекает значение X до целого

import math


print(math.sin(22))


-0.008851309290403876



2.1.4 Функции и методы строк

S = 'str'; S = "str"; S = '''str'''; S = """str"""Литералы строкS = "s\np\ta\nbbb"Экранированные последовательностиS = r"C:\temp\new"Неформатированные строки (подавляют экранирование)S = b"byte"Строка байтовS1 + S2Конкатенация (сложение строк)S1 * 3Повторение строкиS[i]Обращение по индексуS[i:j:step]Извлечение срезаlen(S)Длина строкиS.find(str, [start],[end])Поиск подстроки в строке. Возвращает номер первого вхождения или -1S.rfind(str, [start],[end])Поиск подстроки в строке. Возвращает номер последнего вхождения или -1S.index(str, [start],[end])Поиск подстроки в строке. Возвращает номер первого вхождения или вызывает ValueErrorS.rindex(str, [start],[end])Поиск подстроки в строке. Возвращает номер последнего вхождения или вызывает ValueErrorS.replace(шаблон, замена)Замена шаблонаS.split(символ)Разбиение строки по разделителюS.isdigit()Состоит ли строка из цифрS.isalpha()Состоит ли строка из буквS.isalnum()Состоит ли строка из цифр или буквS.islower()Состоит ли строка из символов в нижнем регистреS.isupper()Состоит ли строка из символов в верхнем регистреS.isspace()Состоит ли строка из неотображаемых символов (пробел, символ перевода страницы ('\f'), "новая строка" ('\n'), "перевод каретки" ('\r'), "горизонтальная табуляция" ('\t') и "вертикальная табуляция" ('\v'))S.istitle()Начинаются ли слова в строке с заглавной буквыS.upper()Преобразование строки к верхнему региструS.lower()Преобразование строки к нижнему региструS.startswith(str)Начинается ли строка S с шаблона strS.endswith(str)Заканчивается ли строка S шаблоном strS.join(список)Сборка строки из списка с разделителем Sord(символ)Символ в его код ASCIIchr(число)Код ASCII в символS.capitalize()Переводит первый символ строки в верхний регистр, а все остальные в нижнийS.center(width, [fill])Возвращает отцентрованную строку, по краям которой стоит символ fill (пробел по умолчанию)S.count(str, [start],[end])Возвращает количество непересекающихся вхождений подстроки в диапазоне [начало, конец] (0 и длина строки по умолчанию)S.expandtabs([tabsize])Возвращает копию строки, в которой все символы табуляции заменяются одним или несколькими пробелами, в зависимости от текущего столбца. Если TabSize не указан, размер табуляции полагается равным 8 пробеламS.lstrip([chars])Удаление пробельных символов в начале строкиS.rstrip([chars])Удаление пробельных символов в конце строкиS.strip([chars])Удаление пробельных символов в начале и в конце строкиS.partition(шаблон)Возвращает кортеж, содержащий часть перед первым шаблоном, сам шаблон, и часть после шаблона. Если шаблон не найден, возвращается кортеж, содержащий саму строку, а затем две пустых строкиS.rpartition(sep)Возвращает кортеж, содержащий часть перед последним шаблоном, сам шаблон, и часть после шаблона. Если шаблон не найден, возвращается кортеж, содержащий две пустых строки, а затем саму строкуS.swapcase()Переводит символы нижнего регистра в верхний, а верхнего – в нижнийS.title()Первую букву каждого слова переводит в верхний регистр, а все остальные в нижнийS.zfill(width)Делает длину строки не меньшей width, по необходимости заполняя первые символы нулямиS.ljust(width, fillchar=" ")Делает длину строки не меньшей width, по необходимости заполняя последние символы символом fillcharS.rjust(width, fillchar=" ")Делает длину строки не меньшей width, по необходимости заполняя первые символы символом fillcharS.format(*args, **kwargs)Форматирование строки

2.2 Условный оператор


sun = input('Введите 1 если погода солнечная, и 2 если пасмурная: ')

if sun == '1':

    d = 'Нужно загорать'

else:

    d = 'Загорать не выйдет'

print(d)


myname = input('Введите логин: ')

mypass = input('Введите пароль: ')

if ((myname == 'tsn') and (mypass == 'superpassword123')) or ((myname == 'boss') and (mypass == '777')):

    print('Привет, ' + myname + '. Добро пожаловать!')

else:

    print('Ты хто такой, тавай дасвидания…')


v = int(input('Введите сколько вам лет: '))

if (v < 18):

    print('Привет, юный кодер')

elif (v < 30):

    print('Здравствуйте, молодой человек')

elif (v < 65):

    print('Добрый день. Как семья, дети?')

elif (v < 100):

    print('Здорово, Михалыч. Пенсию уже дали?')

elif (v < 100000):

    print('Клан бессмертных приветствует тебя!')


Введите 1 если погода солнечная, и 2 если пасмурная: 1

Нужно загорать

Введите логин: tsn

Введите пароль: 123

Ты хто такой, тавай дасвидания…

Введите сколько вам лет: 43

Добрый день. Как семья, дети?




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


# Пример решения квадратного уравнения

import math # Подключение математического модуля


try: # Защищенный блок 1

    a = float(input("Введите A="))

    b = float(input("Введите B="))

    c = float(input("Введите C="))

    try: # Защищенный блок 2

        d = b * b – 4 * a * c

        x1 = (-b + math.sqrt(d)) / (2 * a)

        x2 = (-b – math.sqrt(d)) / (2 * a)

        print('d = ', d)

        print('x1 = ', round(x1, 2))

        print("x2 = " + format(x2, "#.2f"))

    except: # Обработчик ошибок для защищенного блока 1

        print("Нет решения!")

except: # Обработчик ошибок для защищенного блока 2

    print("Неверные входные данные!")

input("Нажмите Enter для выхода") # Задержка перед выходом из программы



Введите A=1

Введите B=2

Введите C=-33

d = 136.0

x1 = 4.83

x2 = -6.83

Нажмите Enter для выхода



2.2.2 Практический пример с условием


# Программа получает ввод чисел X A B, затем выводит значение Y согласно

# y = (10 * (x + a^2)) / (b + a) если x >= 4

# y = 5 * (x + a^2 + b) если x < 4


def main(): # основная функция

    # Получаем ввод X A B используя raw_input. Так как данный оператор всегда

    # возвращает тип str, преобразовываем его в int используя оператор int()

    # В питоне не обязательно объявлять переменные заранее, можно их объявлять

    # сразу же присваивая значение. Тип переменной интерпретатор определяет сам

    a = int(input('Введите A: '))

    b = int(input('Введите B: '))

    x = int(input('Введите X: '))

    if x >= 4:

        y = (10 * (x + a ** 2)) / (b + a)

    else:

        y = 5 * (x + a ** 2 + b)

    # В питоне ' и " равнозначны. Выводим результат на экран. %.1f выводит

    # значение типа float с точностью до одной десятой

    print("y = %.1f" % y)


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

# в качестве модуля (к примеру import lab1)

if __name__ == '__main__':

    main() # вызов основной функции



Введите A: 1

Введите B: 2

Введите X: 3

y = 30.0



2.3 Тернарный условный оператор


a = 10

b = 20

maximum = a if a > b else b

minimum = a if a < b else b

print(minimum, maximum)


10 20


ЛЕКЦИЯ 3 – ОСНОВНЫЕ КОМПОНЕНТЫ PYQT5

3.1 QWidget и QDialog

Окно

№СвойствоНазначение
Имя окна
Доступность
Размеры окна, запрет изменения размера
Шрифт, размер шрифта
Вид курсора
Заголовок окна
Иконка окна
Модальность окна (только у QDialog)

self.setWindowTitle('Создание простейшей визуальной программы')

self.setWindowIcon(QtGui.QIcon('images/logo.png'))


class Main(QWidget) или class Main(QDialog)

 app = QApplication(sys.argv)

window = Main()

window.show()

sys.exit(app.exec_())

3.2 QPushButton

Кнопка

№СвойствоНазначение
Имя компонента
Доступность
Положение компонента и его размеры
Шрифт, размер шрифта
Вид курсора
Стиль рамки
Надпись

def solve(self):

self.btn_solve.clicked.connect(self.solve)


3.3 QLabel

Текстовая метка

№СвойствоНазначение
Имя компонента
Доступность
Положение компонента и его размеры
Шрифт, размер шрифта
Вид курсора
Надпись
Картинка
Масштабирование картинки

self.label_img.setPixmap(QPixmap('images/main.png'))

self.label_img.setScaledContents(True)

self.label_answer.setText('Ответ: ' + str(format(answer, '.12f')))

print (QtGui.QtextDocument(self.label_answer.text()).toPlainText())


3.4 QLineEdit

Текстовое поле для ввода/вывода

№СвойствоНазначение
Имя компонента
Доступность
Положение компонента и его размеры
Шрифт, размер шрифта
Вид курсора
Стиль рамки
Надпись

        a = self.lineEdit_a.text()

        self.lineEdit_a.setText('')

3.5 Практический пример


Вид при использовании QWidget