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
Меняем шрифт надписи
А теперь поменяем шрифт надписи. Теперь код станет таким:
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('Hello, world!!! 123', 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
123 | Жирный текст |
123 | Курив |
123 | Подчёркивание |
| Вычёркивание |
| Код (моноширным шрифтом) |
123 | Надстрочный текст |
123 | Подстрочный текст |
123 | Размер текста 16 пунктов |
123 | Красный текст |
123 | Текст на ярко-зелёном фоне. |
123 | Выравнивание по центру |
Кстати, я знаю такой конструктор 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('Hello, world!!!', self)
self.lbl.move(30, 30)
self.lbl2 = QLabel('Ещё одна метка', 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 QLabel')
Эпилог
Вот и всё. В следующей части я постараюсь описать кнопки, меню и события.
До новых встреч!
