PyQt5 для начинающих

Привет, Хабр! Сегодня я вас хочу научить делать интерфейс на Python 3&PyQt5.

Установка PyQt5

Для того, чтобы установить PyQt5 в Windows или MacOS, откройте Командную строку или Терминал и введите:

pip3 install PyQt5

Для Linux, откройте Терминал и введите:

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install python3-pyqt5

Hello, World!

А сейчас сделаем Hello World приложение. Создайте файл Python, откройте его и введите такой код:

from PyQt5.QtWidgets import *
import sys class MainWindow(QMainWindow): # главное окно def __init__(self, parent=None): super().__init__(parent) self.setupUi() def setupUi(self): self.setWindowTitle("Hello, world") # заголовок окна self.move(300, 300) # положение окна self.resize(200, 200) # размер окна self.lbl = QLabel('Hello, world!!!', self) self.lbl.move(30, 30) if __name__ == "__main__": app = QApplication(sys.argv) win = MainWindow() win.show() sys.exit(app.exec_())

Когда вы запустите, должна получится примерно такая картина:

Окно Hello, world на Ubuntu
Окно Hello, world на Ubuntu

Меняем шрифт надписи

А теперь поменяем шрифт надписи. Теперь код станет таким:

from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
import sys class MainWindow(QMainWindow): # главное окно def __init__(self, parent=None): super().__init__(parent) self.setupUi() def setupUi(self): self.setWindowTitle("Hello, world") # заголовок окна self.move(300, 300) # положение окна self.resize(200, 200) # размер окна self.lbl = QLabel('Hello, world!!!', self) self.lbl.move(30, 30) self.font = QFont() # создаём объект шрифта self.font.setFamily("Rubik") # название шрифта self.font.setPointSize(12) # размер шрифта self.font.setUnderline(True) # подчёркивание self.lbl.setFont(self.font) # задаём шрифт метке if __name__ == "__main__": app = QApplication(sys.argv) win = MainWindow() win.show() sys.exit(app.exec_())

Пример рассчитан на то, что у вас уже установлен шрифт Rubik от Google Fonts. Если нет, его всегда можно скачать отсюда.

Более продвинутая разметка с XHTML

А теперь добавим XHTML. Например, так:

from PyQt5.QtWidgets import *
import sys class MainWindow(QMainWindow): # главное окно def __init__(self, parent=None): super().__init__(parent) self.setupUi() def setupUi(self): self.setWindowTitle("Hello, world") # заголовок окна self.move(300, 300) # положение окна self.resize(200, 200) # размер окна self.lbl = QLabel('<i>Hello</i>, <b>world</b>!!! <s><b>123</b></s>', self) self.lbl.move(30, 30) if __name__ == "__main__": app = QApplication(sys.argv) win = MainWindow() win.show() sys.exit(app.exec_())

Те, кто хотя бы немного знают XHTML, заметят, что надпись Hello сделана курсивом, слово world — жирным, а 123 — и вычеркнуто, и жирное.

Шпаргалка по XHTML

<b>123</b>

Жирный текст

<i>123</i>

Курив

<u>123</u>

Подчёркивание

<s>123</s>

Вычёркивание

<code>123</code>

Код (моноширным шрифтом)

<sup>123</sup>

Надстрочный текст

<sub>123</sub>

Подстрочный текст

<span style=»font-size:16pt;»>123</span>

Размер текста 16 пунктов

<span style=»color:#cc0000;»>123</span>

Красный текст

<span style=» background-color:#00ff00;»>123</span>

Текст на ярко-зелёном фоне.

<span align=»center»>123</span>

Выравнивание по центру

Кстати, я знаю такой конструктор HTML. Лично мне он по душе. Только сложно вставлять свои тэги.

Больше надписей!

А теперь сделаем 2 надписи:

from PyQt5.QtWidgets import *
import sys class MainWindow(QMainWindow): # главное окно def __init__(self, parent=None): super().__init__(parent) self.setupUi() def setupUi(self): self.setWindowTitle("Hello, world") # заголовок окна self.move(300, 300) # положение окна self.resize(200, 200) # размер окна self.lbl = QLabel('<i>Hello</i>, <b>world</b>!!!', self) self.lbl.move(30, 30) self.lbl2 = QLabel('<u>Ещё одна метка</u>', self) self.lbl2.move(50, 50) if __name__ == "__main__": app = QApplication(sys.argv) win = MainWindow() win.show() sys.exit(app.exec_())

На вторую я тоже добавил форматирование (подчёркивание), а у первой убрал 123.

Окно без resize()

Все предыдущие примеры использовали такую конструкцию:

self.resize(200, 200)

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

Подсказки

Ко всем виджетам можно добавить подсказку. Например (привожу только важную для понимания часть кода):

self.lbl.setToolTip('This is a <b>QLabel</b>')

Эпилог

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

До новых встреч!

Читайте так же:

  • Лечение сайта клиента в трех примерахЛечение сайта клиента в трех примерах Каждый день тысячи сайтов заражаются вирусами, троянами и другим вредоносным ПО. Уже неоднократно говорилось (тут и тут, к примеру) об источниках и способах заражения сайтов, а также их уязвимостях. В Интернете можно найти статьи и гайды о самостоятельном поиске вируса на сайте и его […]
  • [Перевод] Лучшие GUI для MongoDB в 2021 году[Перевод] Лучшие GUI для MongoDB в 2021 году MongoDB — это NoSQL-база данных, которую в том или ином виде используют более четверти разработчиков. MongoDB и другие NoSQL-базы данных привлекают своей гибкостью: вместо жесткой схемы и вертикального масштабирования, у вас есть возможность развивать схему постепенно и масштабироваться […]
  • Лишь 14% россиян зарабатывают на фриланс-проектахЛишь 14% россиян зарабатывают на фриланс-проектах Сегодня, 14 мая. В России отмечается День фрилансера. Несмотря на то. Что первая официальная фриланс-биржа. Где каждый желающий мог найти себе онлайн-работу. Открылась 16 лет назад. Большинство россиян по-прежнему отдает предпочтение работе офлайн.  К такому выводу пришли аналитики […]
  • Обзор ноутбука ASUS VivoBook 15 OLED K513Обзор ноутбука ASUS VivoBook 15 OLED K513 Привет, Хабр! Сегодня я расскажу вам о тонком и лёгком ноутбуке VivoBook 15 OLED K513 с невероятным OLED-экраном, высокой автономностью и классным дизайном! Содержание Технические характеристики Дисплей: 15,6 дюймов, 1920x1080, OLED, глянцевый, пиковая яркость 600 кд/м², […]