© EVILEG 2015-2018
Рекомендует хостинг
TIMEWEB

Привет Qt для Python

PyQt5, Qt, Python, PySide2

Скоро будет выпущена технология предоставляющая Qt для Python о чём рассказали в блоге Qt Company. Речь идёт о PySide2, которая явяется официальным аналогом PyQt .

Рассмотрим создание не сложного приложения показывающего простоту Qt для Python с использованием виджетов QWidgets. Все скрипты будут иметь схожую структуру:

  1. Создаем QApplication
  2. Затем добавляем все QWidgets и структуры которые мы хотим использовать, (например QLabel)
  3. Показываем приложение и запускаем QApplication

Если мы совместим все эти шаги, то получим следующее:

# hello_world.py
from PySide2.QtWidgets import QApplication, QLabel
 
app = QApplication([])
label = QLabel("Hello Qt for Python!")
label.show()
app.exec_()

Для выполнения данного скрипта просто выполним команду python hello_world.py

Но это еще не всё, тогда возникает вопрос: как получить доступ к методам класса Qt классу? Чтобы упростить этот процесс, мы используем Qt API. Например, если мы хотим указать размер для QLabel, то в C++, мы получим следующее:

QLabel *label = new QLabel();
label->setText("Hello World!");
label->resize(800, 600);

Аналог использования Qt для Python будет выглядеть так:

label = QLabel()
label.setText("Hello World!")
label.resize(800, 600)

Зная эквивалентный код из С++ мы можем написать приложение сложнее.

import sys
import random
from PySide2.QtCore import Qt
from PySide2.QtWidgets import (QApplication, QWidget,
    QPushButton, QLabel, QVBoxLayout)
 
 
class MyWidget(QWidget):
    def __init__(self):
        QWidget.__init__(self)
 
        self.hello = ["Hallo welt!", "Ciao mondo!",
            "Hei maailma!", "Hola mundo!", "Hei verden!"]
 
        self.button = QPushButton("Click me!")
        self.text = QLabel("Hello World")
        self.text.setAlignment(Qt.AlignCenter)
 
        self.layout = QVBoxLayout()
        self.layout.addWidget(self.text)
        self.layout.addWidget(self.button)
        self.setLayout(self.layout)
 
        self.button.clicked.connect(self.magic)
 
    def magic(self):
        self.text.setText(random.choice(self.hello))
 
 
if __name__ == "__main__":
    app = QApplication(sys.argv)
    widget = MyWidget()
    widget.resize(800, 600)
    widget.show()
    sys.exit(app.exec_())

Если даже вы не знакомы с разработкой на Qt, то заметите что, общей практикой для разработки является расширение определенных классов и их адаптация под свои нужды. В предыдущем примере мы использовали QWidget как базовый класс с подключением QLabel и QPushButton.

Приложение на самом деле простое

  1. Первое, что мы делаем, это пишем Hello World, как и на любом языке
  2. Затем мы настраиваем QPushButton и QLabel, задавая шрифт и размер
  3. После этого создаем QVBoxLayout содержаший наши объекты и добавляем в него объект нашего класса
  4. В конце мы подключаем сигнал clicked() от кнопки QPushButton к нашему методу magic

Структура этого простого скрипта будет основой для большинства приложений, использующих Qt для Python, и мы рекомендуем Вам протестировать его, как только Qt для Python выйдет!

Комментарии

Комментарии

Только авторизованные пользователи могут оставлять комментарии.
Пожалуйста, Авторизуйтесь или Зарегистрируйтесь
25 июня 2018 г. 11:55
lebendig

C++ - Тест 006. Перечисления

  • Результат 100 баллов
  • Очки рейтинга 10
25 июня 2018 г. 11:24
lebendig

C++ - Тест 005. Структуры и Классы

  • Результат 100 баллов
  • Очки рейтинга 10
25 июня 2018 г. 8:48
lebendig

C++ - Тест 004. Указатели, Массивы и Циклы

  • Результат 100 баллов
  • Очки рейтинга 10
Последние комментарии
25 июня 2018 г. 9:34
EVILEG

Как написать игру на Qt - Урок 4. Враг - смысл в выживании

Там неправильный подсчёт был по направлению и полный бардак был с поведением, эти 45 градусов исправляли ситуацию. Точную причину уже совсем не помню. А вообще все эти расчёты довольно...
25 июня 2018 г. 9:13
MarkSD

Как написать игру на Qt - Урок 4. Враг - смысл в выживании

Здравствуйте, Подскажите, пжлст, как работает этот код : QLineF lineToTarget(QPointF(0, 0), mapFromItem(target, 0, 0));  // Проводим линию от паука к мухе qreal angl...
25 июня 2018 г. 7:51
EVILEG

PyQt5 - Урок 003. QSystemTrayIcon - Как свернуть приложение в трей

Если не ошибаюсь, можно просто удалить вот эту строку central_widget.setLayout(grid_layout) Там указатель на парента передаётся в само размещение, что автоматически заменяет в размещен...
Сейчас обсуждают на форуме
25 июня 2018 г. 17:38
IscanderChe

Иконка исполняемого файла

Спасибо!
25 июня 2018 г. 13:12
Arrow

QComboBox и База данных

И если можно еще один вопрос. Таблицы во вложении. Если писать: mainModel = new QSqlRelationalTableModel(this);mainModel-&g...;
25 июня 2018 г. 7:49
EVILEG

На чём сделан этот сайт?

Добрый день! На сервере сайта установлена Ubuntu 16.04. В качестве сервера используется VDS. Хостинг-провайдер Timeweb . Сайт написан на Django/Python, для...
19 июня 2018 г. 7:56
EVILEG

как редактировать порядок обхода этементов по нажатию TAB в Qt5 qml

Что-то наподобие такого TextField { Keys.onReturnPressed: nextItemInFocusChain().forceActiveFocus()}

Рекомендуемые страницы