Qt документация на русском: Qt Documentation | Home

Содержание

Перевод документации Qt Creator на русский язык

хоть я и не в команде qtrtt, но и свои пять копеек внести могу )

переговоры с троллями наконец-то увенчались успехом и как возможное продолжение работ был предложен следующий вариант (поэтапно):
* переведённая документация оформляется в qtcreator_ru.qdoc и создаётся merge-request в репу qtcreator
  * по возможности прорабатывается правило сборки документации qtcreator_ru.qdoc -> qtcreator_ru.qch (опционально, но может ускорить процесс…)
* разрабатывается патч для QtAssistant, добавляющий опцию вроде «предпочитаемый язык документации», функцию поиска доступных наборов документации в каталогах с документацией и выбора набора в соответствии с предпочтениями пользователя (практически так же сейчас работает QTranslator). всё это дело также оформляется в MR и отправляется в репу Qt.

надеюсь, я понятно язъяснился…
призываю к обсуждению)

1. Технически перенести перевод в qtcreator_ru.qdoc не сложно, это будет механическая работа, которую к сожалению нельзя автоматизировать. Но не придется ли модифицировать qdoc3 для того чтобы правильно сгенерировать из qdoc русскую документацию? Приведу пример:

/*! \contentspage index.html
    \previouspage creator-quick-tour.html
    \page creator-code-editor.html
    \nextpage creator-project-pane.html

\previouspage Будет заменен на Previous:, а \nextpage на Next:. Умеет ли он использовать слова из другого языка?
2. Правило сборки написать легко, по этому пункту вопросов нет.
3. У документации есть custom filters, в переведенную версию мы добавляем фильтр «ru». Если его выбрать, останется только русская документация. Нужно ли еще что-либо дописывать?

К тому же помимо перевода документации для Qt Creator, мы переводим и документацию к самой библиотеки. Реализовать для нее предложенный вариант перевода не получится так как это приведет к правке исходников самой библиотеки, а использовать два разных подхода не рационально. Так что не думаю что это будет хорошей идеей…

Overview of Qt Resources (Russian)

В статье выполнен обзор источников информации по разработке приложений с использованием семейства библиотек Qt.

Содержание

  1. Официальная документация и переводы
  2. Печатные издания
  3. Руководства
  4. Образовательные материалы
  5. Блоги и сетевые сообщества
  6. Видеоматериалы

Официальная документация по наиболее свежей стабильной версии Qt http://doc.qt.nokia.com/latest/index.html

Обновляемый архив переводной документации по кросс-платформенным средствам разработки, преимущественно Qt. Имеет богатую, постоянно пополняемую коллекцию вики-страниц, посвященных различным аспектам разработки, инструментальным средствам и библиотекам на русском языке и форум. http://doc.crossplatform.ru/

Официальный перечень http://qt.nokia.com/developer/books/

Beginning Nokia Apps Development: Using MeeGo, Mobile QT and OpenSymbian by Ray Rischpater and Dan Zucker http://apress.com/book/view/9781430231776

Отсутствует пока в официальном перечне.

Официальные руководства http://doc.qt.nokia.com/latest/tutorials.html и примеры кода http://doc.qt.nokia.com/latest/all-examples.html от Nokia

Огромная база руководств в вики Qt Developer Network http://developer.qt.nokia.com/wiki/

Огромная база статей и примеров кода на ForumNokia http://wiki.forum.nokia.com/index.php/Category:Qt

Несколько небольших статей для новичков по использованию QtCreator от Novell http://www.novell.com/communities/node/7078/qt-programming-part-1

Четыре статьи на IBM DevelopmentWorks, посвященные Qt + C++ от Алексея Бешенова http://www.ibm.com/developerworks/ru/library/l-qt_1/

Статья на IBM DevelopmentWorks по Qt + PyQt http://www.ibm.com/developerworks/linux/library/l-qt/

Авторское руководство по разработке на C++ с использованием Qt. Содержит введение в Qt и раскрывает ряд вопросов по разработке графических интерфейсов. http://zetcode.com/tutorials/qt4tutorial/

Также на сайте представлены руководства по использованию Qt в программах на языках: Java http://zetcode.com/tutorials/qtjambitutorial, Python http://zetcode.com/tutorials/pyqt4, C# http://zetcode.com/tutorials/qyotosharptutorial
Visual Basic http://zetcode.com/tutorials/qyotovisualbasictutorial Ruby http://zetcode.com/tutorials/qtrubytutorial.

Небольшой набор переводов на русский язык статей по Qt http://qt.osdn.org.ua/

Руководство по разработке игры с использованием QtQuick http://quitcoding.com/

Набор мини-руководств и заметок, посвященных преимущественно вопросам использования QtMobility API для Symbian. При этом освещены некоторые сложные моменты установки средств разработки для ОС Windows и Ubuntu Linux http://qt-mobility.blogspot.com/

Подборка из ответов на распространенные вопросы, мини-руководств, полезных мелочей. К сожалению, не обновляется с2008. http://qtnode.net/wiki/Main_Page

Небольшое руководство по Qt + C++ для& начинающих http://www.clivecooper.co.uk/tutorial/index.html

Небольшое руководство по использованию PyQt4 с QtDesigner http://lionel.textmalaysia.com/a-simple-tutorial-on-gui-programming-usin…

Официальная обучающий курс по Qt от Nokia http://qt.nokia.com/services-partners/qt-in-education/qt-in-education-co… в настоящее время переводится на русский язык силами сообщества: http://lorcode.org/wiki/Qt_in_Education_Course_Material

Вводные учебные материалы и презентации от Nokia http://qt.nokia.com/services-partners/qt-in-education/

Еще несколько онлайн-презентаций от Nokia http://qt.nokia.com/developer/learning/online/training/specialized-elear… и их загружаемые копии http://qt.nokia.com/developer/learning/online/training/materials/

Библиотека учебных материалов& на ForumNokia http://www.forum.nokia.com/Library/Learning/Qt.xhtml

Несколько руководств посвященных Qt for Symbian and Maemo http://symbianresources.com/tutorials/qt.php

Набор модулей для выполнения лабораторных работ в режиме hands on. Содержит модули, обеспечивающие введение в Qt, особенности разработки Qt-приложений для Symbian и Maemo, работу с подсистемами геопозиционирования и управления контактами QtMobility API. http://www.forum.nokia.com/document/Mobile_Hands-on_Labs/Qt/

Подборка ссылок на руководства PySide + QML http://www.maemonokian900.com/maemo-news/pysideqml-tutorials-online-work…

Официальное сообщество Qtразработчиков http://developer.qt.nokia.com/

Портал международного сообщества разработчиков на языке C++ с использованием Qt, включающий ссылки на документацию, вики и активный форум. http://www.qtcentre.org

Активный русскоязычный форум по кроссплатформенному программированию, преимущественно Qt http://www.forum.crossplatform.ru/

Форум по Qt-программированию. Преимущественно рассматриваются общие вопросы программирования с использованием Qt (безотносительно целевой платформы). Ряд тем представляет собой мини-руководства http://www.qtforum.org

Активная ветвь на форуме программистов VinGrad http://forum.vingrad.ru/forum/c-c++QT-gtk-wxWidgets.html

Блог, освещающий события в мире Qt-разработки http://planetqt.org/

Русский Qt-форум http://www.prog.org.ru/

Небольшой блог из заметок о Qt-программировании http://qt-way-notes.blogspot.com/

Небольшой блог, в котором автор делится решениями встреченных в процессе разработки проблем http://qtblog.ru/

http://qt.nokia.com/developer/learning/online/talks/developerdays2010
http://qt.nokia.com/developer/learning/online/training/training-day-at-d…
http://www.ics.com/learning/icsnetwork/
http://www.callingallinnovators.com/10M/events_and_training.aspx

Руководство по PyQt5

В этом руководстве по PyQt5 будет показано, как использовать Python 3 и Qt для создания графического интерфейса пользователя в Windows, Mac или Linux. Мы даже расскажем, как самостоятельно написать установщик.

Что такое PyQt5?

PyQt — это библиотека, которая позволяет использовать фреймворк Qt GUI (GUI — это графический интерфейс пользователя) в Python. Сам Qt, как известно, написан на C++. Используя его в Python, вы можете создавать приложения намного быстрее, не жертвуя при этом значительной частью производительности C++.

PyQt5 это самая последняя, пятая версия Qt. Еще можно найти в интернете случайное упоминание PyQt4, но эта версия устарела и больше не поддерживается.

Новый интересный конкурент PyQt — это Qt for Python. Она обладает практически идентичным API, но в отличие от PyQt имеет лицензию LGPL и, следовательно, может использоваться бесплатно даже в коммерческих проектах. Она поддерживается компанией Qt, а значит, скорее всего, за ней будущее. Здесь мы используем PyQt, потому что она более зрелая. Но, так как их интерфейсы очень похожи, вы всегда можете перейти на Qt for Python позднее.

Установка PyQt

Лучший способ управлять зависимостями в Python — через виртуальную среду. Виртуальная среда — это просто локальный каталог, содержащий библиотеки для данного конкретного проекта. В отличии от общесистемной установки библиотек, это не не повлияет на другие ваши проекты.

Для создания виртуальной среды в текущем каталоге выполните следующую команду:

python3 -m venv venv

Эта команда создаст директорию

venv/. Чтобы активировать виртуальную среду в Windows, выполните следующую команду:

call venv/scripts/activate.bat

А для Mac и Linux вот эту:

source venv/bin/activate

То, что виртуальная среда активирована, вы можете увидеть по префиксу (venv) в командной строке:

Теперь, чтобы установить PyQt, выполните следующую команду:

pip install PyQt5==5.9.2

Мы используем версию 5.9.2, потому что не все версии PyQt одинаково стабильны. Данная версия гарантированно будет работать хорошо.

Итак, поздравляем! Вы только что успешно установили PyQt5.

Создание GUI (графического интерфейса пользователя)

Теперь самое время написать ваш первый графический интерфейс! В нашей виртуальной среде запустим Python и выполним следующие команды:

Сначала мы загружаем библиотеку PyQt при помощи оператора import:

from PyQt5.QtWidgets import QApplication, QLabel

Затем мы создаем QApplication при помощи следующей команды:

app = QApplication([])

Это обязательное требование библиотеки Qt: каждое приложение с графическим интерфейсом пользователя должно иметь ровно один экземпляр класса QApplication. До выполнения данной строки многие вещи в Qt просто не работают. Поэтому такая команда будет присутствовать в каждом вашем Qt приложении.

Скобки [] в данной команде представляют аргументы командной строки, переданные приложению. Поскольку наше приложение не использует никаких параметров, мы оставляем скобки пустыми.

Теперь, чтобы реально что-нибудь увидеть, мы создаем следующее сообщение:

label = QLabel('Hello World!')

Затем мы даем команду вывести это на экран:

label.show()

Эта команда покажет небольшое окошко (его вид зависит от вашей операционной системы):

Последний шаг — передача управления библиотеке Qt и указание «запустить приложение, пока пользователь не закроет его». Это делается так:

app.exec_()

Если все это сработало, как ожидалось, тогда супер! Вы только что создали при помощи Python и библиотеки Qt свое первое приложение с графическим интерфейсом.

Виджеты

Все, что вы видите в приложениях PyQt, называется виджетами. Кнопки, сообщения, окна, диалоговые окна, индикаторы выполнения и так далее — все это виджеты. Подобно html элементам, виджеты в Qt зачастую вложены друг в друга. Например, окно может содержать кнопку, а кнопка, в свою очередь, — сообщение.

На следующей картинке показаны наиболее распространенные виджеты Qt:

Они перечислены ниже в порядке сверху вниз и слева направо:

Отсюда вы можете загрузить, если хотите, код приложения, которое создает такое окно.

Макеты

Как и в приведенном выше примере, ваш графический интерфейс, скорее всего, будет состоять из нескольких виджетов. В этом случае вам нужно указать Qt, как их расположить. Например, вы можете использовать QVBoxLayout для вертикального расположения виджетов:

Вот код, создающий интерфейс, изображенный на картинке выше:

from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QVBoxLayout

app = QApplication([])
window = QWidget()
layout = QVBoxLayout()
layout.addWidget(QPushButton('Top'))
layout.addWidget(QPushButton('Bottom'))
window.setLayout(layout)
window.show()
app.exec_() 

Как и ранее, мы создали экземляр класса QApplication. Затем мы создаем само окно (window). Мы используем для него самый простой тип QWidget, так как он просто используется как контейнер, а никакого особого поведения нам задавать не нужно. Затем мы создаем макет (layout) и добавляем к нему две кнопки QPushButton. Наконец, мы говорим окну использовать именно этот макет (и, следовательно, его содержимое). Как и в нашем первом приложении, мы заканчиваем вызовами методов .show () и app.exec_ ().

Безусловно, существует большое количество разных макетов, например QHBoxLayout для размещения элементов в ряд. Более подробно с ними можно ознакомиться в документации Qt.

Пользовательские стили

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

Встроенные стили

Самый грубый способ изменить внешний вид вашего приложения — установить глобальный стиль. Вспомните изображение виджетов, которое мы уже приводили выше:

Здесь используется стиль под названием Fusion. Если вместо этого использовать стиль Windows, это будет выглядеть следующим образом:

Чтобы применить стиль, нужно использовать метод app.setStyle (…):

from PyQt5.QtWidgets import *
app = QApplication([])
app.setStyle('Fusion')
...

Доступные стили зависят от вашей платформы, но обычно они включают в себя «Fusion», «Windows», «WindowsVista» (только для Windows) и «Macintosh» (только для Mac).

Пользовательские цвета

Если вам нравится стиль, но вы хотите изменить его цвета (например, на темную тему), вы можете использовать QPalette и app.setPalette (...). Например:

from PyQt5.QtCore import Qt
from PyQt5.QtGui import QPalette
from PyQt5.QtWidgets import QApplication, QPushButton

app = QApplication([])
app.setStyle('Fusion')
palette = QPalette()
palette.setColor(QPalette.ButtonText, Qt.red)
app.setPalette(palette)
button = QPushButton('Hello World')
button.show()
app.exec_() 

Это изменит цвет текста в кнопках на красный:

Как создать темную тему стиля Fusion, можно посмотреть вот здесь.

Таблицы стилей

В дополнение к вышесказанному вы можете изменить внешний вид своего приложения с помощью таблиц стилей. Это аналог CSS в Qt. Например, мы можем добавить некоторое пространство:

from PyQt5.QtWidgets import QApplication, QPushButton

app = QApplication([])
app.setStyleSheet("QPushButton { margin: 10ex; }")
button = QPushButton('Hello World')
button.show()
app.exec_() 

Для получения дополнительной информации о таблицах стилей смотрите документацию Qt.

Сигналы и слоты

Qt использует механизм, называемый сигналами (signals), чтобы вы могли реагировать на такие события, как нажатие кнопки пользователем. Следующий пример иллюстрирует это. Код содержит кнопку, при нажатии на которую отображается окно сообщения.

from PyQt5.QtWidgets import *

app = QApplication([])
button = QPushButton('Click')
def on_button_clicked():
    alert = QMessageBox()
    alert.setText('You clicked the button!')
    alert.exec_()

button.clicked.connect(on_button_clicked)
button.show()
app.exec_() 

Строка button.clicked — это сигнал, метод .connect (...) позволяет нам установить на нем так называемый слот. Это просто функция, которая вызывается при поступлении сигнала. В приведенном выше примере наш слот показывает окно сообщения.

Термин «слот» важен при использовании Qt в C++, потому что в C++ слоты должны быть объявлены особым образом. Однако в Python любая функция может быть слотом — мы видели это выше. Поэтому различие между слотами и обычными функциями не имеет для нас большого значения.

Сигналы в Qt используются повсеместно. И, конечно, вы также можете определить свои собственные сигналы. Но это выходит за рамки данного руководства.

Компилируем наше приложение

Теперь у вас есть базовые знания для создания GUI, который реагирует на ввод пользователя. Допустим, вы написали приложение. Оно работает на вашем компьютере. Как передать его другим людям, чтобы они тоже могли его запустить?

Вы можете попросить пользователей вашего приложения установить Python и PyQt, как мы сделали выше, а затем предоставить им свой исходный код. Но это очень утомительно (и обычно непрактично). Вместо этого нам нужен отдельный вариант вашего приложения. То есть двоичный исполняемый файл, который другие люди могут запускать в своих системах, не устанавливая ничего.

В мире Python процесс превращения исходного кода в автономный исполняемый файл называется замораживанием (freezing). Несмотря на наличие множества библиотек, решающих эту проблему, например PyInstaller, py2exe, cx_Freeze, bbfreze, py2app и так далее, замораживание приложений PyQt всегда было на удивление непростой проблемой.

Мы будем использовать новую библиотеку под названием fbs, которая позволяет создавать автономные исполняемые файлы для приложений PyQt. Для ее установки введите команду:

pip install fbs

Затем выполним следующую команду:

fbs startproject

Вам будет предложено ввести несколько значений:

Когда вы введете предложенную команду run, должно открыться пустое окно:

Это приложение PyQt5, такое же, как и те, что мы видели раньше. Его исходный код находится в src/main/python/main.py в вашем текущем каталоге. Но вот что самое интересное: мы можем использовать fbs, чтобы превратить его в отдельный исполняемый файл!

fbs freeze

Эта команда создает и помещает автономный двоичный файл в папку /MyApp/ вашего текущего каталога. Вы можете отправить его своим друзьям (с той же ОС, что и ваша), и они также смогут запустить ваше приложение!

Бонус: создаем установщик

Библиотека fbs также позволяет вам создать установщик для вашего приложения с помощью команды fbs installer:

(Если вы работаете в Windows, вам сначала нужно установить NSIS и поместить путь к нему в свой PATH.)

За дополнительной информацией по использованию библиотеки fbs обратитесь к ее документации.

Итоги

Если вы дошли до этого места — примите наши поздравления. Надеемся, теперь у вас есть хорошее представление о том, как для написания приложений Python можно использовать PyQt (и различные ее части). Мы также узнали, как можно создавать автономные исполняемые файлы и установщики при помощи fbs.

Марк Лутц «Изучаем Python»

Скачивайте книгу у нас в телеграм

Скачать ×

Виджеты в PyQt5 | Python 3 для начинающих и чайников

Виджеты – это основные строительные кирпичики приложения. PyQt5 имеет множество разнообразных виджетов, включая кнопки, чекбоксы, ползунки и списки. В этой части руководства, мы опишем несколько полезных виджетов: QCheckBox, ToggleButton, QSlider, QProgressBar и QCalendarWidget.

QCheckBox (чекбокс)

QCheckBox – чекбокс (виджет, который имеет два состояния: включен и выключен). Как правило, чекбоксы используют для функций приложения, которые могут быть включены или выключены.

#!/usr/bin/python3
# -*- coding: utf-8 -*-

import sys
from PyQt5.QtWidgets import QWidget, QCheckBox, QApplication
from PyQt5.QtCore import Qt


class Example(QWidget):

    def __init__(self):
        super().__init__()

        self.initUI()


    def initUI(self):

        cb = QCheckBox('Show title', self)
        cb.move(20, 20)
        cb.toggle()
        cb.stateChanged.connect(self.changeTitle)

        self.setGeometry(300, 300, 250, 150)
        self.setWindowTitle('QCheckBox')
        self.show()


    def changeTitle(self, state):

        if state == Qt.Checked:
            self.setWindowTitle('QCheckBox')
        else:
            self.setWindowTitle('')


if __name__ == '__main__':

    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())

В нашем примере, мы создаём чекбокс, который переключает заголовок окна.

cb = QCheckBox('Show title', self)

Это конструктор QCheckBox.

cb.toggle()

Мы установили заголовок окна так, что мы должны к тому же проверять чекбокс. По умолчанию, заголовок окна не установлен и чекбокс выключен.

cb.stateChanged.connect(self.changeTitle)

Мы связываем наш метод changeTitle(), с сигналом stateChanged. Метод changeTitle() будет переключать заголовок окна.

def changeTitle(self, state):

    if state == Qt.Checked:
        self.setWindowTitle('QCheckBox')
    else:
        self.setWindowTitle('')

Если виджет помечен галочкой, мы устанавливаем заголовок окна. В противном случае, мы устанавливаем пустую строку в заголовке.

Кнопка переключателя (toogle button)

Кнопка переключателя – это QPushButton в особом режиме. Это кнопка, которая имеет два состояния: нажатое и не нажатое. Мы переключаемся между этими двумя состояниями, кликая по ней. Существуют ситуации, где эта функциональность отлично подходит.

#!/usr/bin/python3
# -*- coding: utf-8 -*-

import sys
from PyQt5.QtWidgets import (QWidget, QPushButton,
    QFrame, QApplication)
from PyQt5.QtGui import QColor


class Example(QWidget):

    def __init__(self):
        super().__init__()

        self.initUI()


    def initUI(self):

        self.col = QColor(0, 0, 0)

        redb = QPushButton('Red', self)
        redb.setCheckable(True)
        redb.move(10, 10)

        redb.clicked[bool].connect(self.setColor)

        greenb = QPushButton('Green', self)
        greenb.setCheckable(True)
        greenb.move(10, 60)

        greenb.clicked[bool].connect(self.setColor)

        blueb = QPushButton('Blue', self)
        blueb.setCheckable(True)
        blueb.move(10, 110)

        blueb.clicked[bool].connect(self.setColor)

        self.square = QFrame(self)
        self.square.setGeometry(150, 20, 100, 100)
        self.square.setStyleSheet("QWidget { background-color: %s }" %
            self.col.name())

        self.setGeometry(300, 300, 280, 170)
        self.setWindowTitle('Toggle button')
        self.show()


    def setColor(self, pressed):

        source = self.sender()

        if pressed:
            val = 255
        else: val = 0

        if source.text() == "Red":
            self.col.setRed(val)
        elif source.text() == "Green":
            self.col.setGreen(val)
        else:
            self.col.setBlue(val)

        self.square.setStyleSheet("QFrame { background-color: %s }" %
            self.col.name())


if __name__ == '__main__':

    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())

В нашем примере, мы создаём три кнопки переключателя и QWidget. Мы устанавливаем чёрный цвет фона. Кнопки переключателей будут переключать красные, зелёные и синие части значений цвета. Цвет фона будет зависеть от того, на какие кнопки переключателей мы нажали.

self.col = QColor(0, 0, 0)

Это начальное значение цвета (чёрный).

redb = QPushButton('Red', self)
redb.setCheckable(True)
redb.move(10, 10)

Чтобы создать кнопку переключателя, мы создаём QPushButton и делаем её проверяемой, путём вызова метода setCheckable().

redb.clicked[bool].connect(self.setColor)

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

source = self.sender()

Мы получаем кнопку, которая была переключена.

if source.text() == "Red":
    self.col.setRed(val)

В случае кнопки red, мы обновляем красную часть цвета соответственно.

self.square.setStyleSheet("QFrame { background-color: %s }" % self.col.name())

Мы используем таблицы стилей, чтобы менять цвет фона.

QSlider (ползунок)

Qslider – ползунок (виджет, который имеет простой регулятор). Этот регулятор может быть утянут назад и вперёд. Таким способом, мы выбираем значение для конкретной задачи. Иногда, использование ползунка более естественно, чем ввод числа или использование переключателя-счётчика. В нашем примере, мы покажем один ползунок и одну метку. Метка будет показывать изображение. Ползунок будет контролировать метку.

#!/usr/bin/python3
# -*- coding: utf-8 -*-

import sys
from PyQt5.QtWidgets import (QWidget, QSlider,
    QLabel, QApplication)
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QPixmap


class Example(QWidget):

    def __init__(self):
        super().__init__()

        self.initUI()


    def initUI(self):

        sld = QSlider(Qt.Horizontal, self)
        sld.setFocusPolicy(Qt.NoFocus)
        sld.setGeometry(30, 40, 100, 30)
        sld.valueChanged[int].connect(self.changeValue)

        self.label = QLabel(self)
        self.label.setPixmap(QPixmap('mute.png'))
        self.label.setGeometry(160, 40, 80, 30)

        self.setGeometry(300, 300, 280, 170)
        self.setWindowTitle('QSlider')
        self.show()


    def changeValue(self, value):

        if value == 0:
            self.label.setPixmap(QPixmap('mute.png'))
        elif value > 0 and value <= 30:
            self.label.setPixmap(QPixmap('min.png'))
        elif value > 30 and value < 80:
            self.label.setPixmap(QPixmap('med.png'))
        else:
            self.label.setPixmap(QPixmap('max.png'))


if __name__ == '__main__':

    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())

В нашем примере, мы симулируем контроль громкости. Путём перетаскивания регулятора ползунка, мы меняем изображение на метке.

sld = QSlider(Qt.Horizontal, self)

Здесь мы создаём горизонтальный ползунок.

self.label = QLabel(self)
self.label.setPixmap(QPixmap('mute.png'))

Мы создаём виджет QLabel и устанавливаем начальное изображение «Mute» на него.

sld.valueChanged[int].connect(self.changeValue)

Мы привязываем сигнал valueChanged к определенному нами методу changeValue().

if value == 0:
    self.label.setPixmap(QPixmap('mute.png'))
...

Основываясь на значении ползунка, мы устанавливаем изображение на метку. В коде выше, мы устанавливаем изображение mute.png на метку, если ползунок приравнен к нулю.

QProgressBar (прогресс бар)

QProgressBar – прогресс бар (виджет, который используется, когда мы обрабатываем продолжительные задачи). Он анимирует процесс, чтобы пользователи знали, что задача продвигается. Мы можем установить минимальное и максимальное значение для прогресс бара. Значения по умолчанию – 0 и 99.

#!/usr/bin/python3
# -*- coding: utf-8 -*-

import sys
from PyQt5.QtWidgets import (QWidget, QProgressBar,
    QPushButton, QApplication)
from PyQt5.QtCore import QBasicTimer


class Example(QWidget):

    def __init__(self):
        super().__init__()

        self.initUI()


    def initUI(self):

        self.pbar = QProgressBar(self)
        self.pbar.setGeometry(30, 40, 200, 25)

        self.btn = QPushButton('Start', self)
        self.btn.move(40, 80)
        self.btn.clicked.connect(self.doAction)

        self.timer = QBasicTimer()
        self.step = 0

        self.setGeometry(300, 300, 280, 170)
        self.setWindowTitle('QProgressBar')
        self.show()


    def timerEvent(self, e):

        if self.step >= 100:
            self.timer.stop()
            self.btn.setText('Finished')
            return

        self.step = self.step + 1
        self.pbar.setValue(self.step)


    def doAction(self):

        if self.timer.isActive():
            self.timer.stop()
            self.btn.setText('Start')
        else:
            self.timer.start(100, self)
            self.btn.setText('Stop')


if __name__ == '__main__':

    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())

В нашем примере, мы имеем горизонтальный индикатор прогресса и кнопку. Кнопка запускает и останавливает индикатор прогресса.

self.pbar = QProgressBar(self)

Это конструктор QProgressBar.

self.timer = QtCore.QBasicTimer()

Чтобы активировать индикатор прогресса, мы используем объект таймера.

self.timer.start(100, self)

Чтобы запустить событие таймера, мы вызываем его методом start(). Этот метод имеет два параметра: таймаут, и объект, который будет принимать события.

def timerEvent(self, e):

    if self.step >= 100:

        self.timer.stop()
        self.btn.setText('Finished')
        return

    self.step = self.step + 1
    self.pbar.setValue(self.step)

Каждый QObject и его наследники имеют обработчик событий timerEvent(). Для того, чтобы реагировать на события таймера, мы переопределяем обработчик событий.

def doAction(self):

    if self.timer.isActive():
        self.timer.stop()
        self.btn.setText('Start')

    else:
        self.timer.start(100, self)
        self.btn.setText('Stop')

Внутри метода doAction(), мы запускаем и останавливаем таймер.

Использование библиотек LibUSB и V-USB в проектах QT | pc

Библиотека Qt и сопутствующая ей среда разработки Qt Creator составляют очень удобное в использовании средство для создания кроссплатформенных программ на С++. Хорошую документацию и множество примеров можно найти как на английском, так и русском языках (например, [1-3]), и сама IDE Qt Creator хорошо русифицирована. Механизм слотов и сигналов, который лежит в основе Qt, отлично подходит для создания хост-программ управления USB устройствами на базе микроконтроллеров AVR (производитель Atmel). Для решения такого рода задач успешно используются библиотеки V-USB [8] и libusb [9]. Однако примеров использования libusb совместно Qt для управления USB-устройствами на основе V-USB на просторах Интернета найти довольно трудно. В этой статье описывается разработка программы для компьютера (далее она будет называться для краткости ПО хоста), которая управляет макетной платой с микроконтроллером AVR (простое управление светодиодом). Приводятся два варианта ПО хоста – консольный и с оконным интерфейсом.

[Особенности установки библиотеки libusb в случае ее использования в проектах Qt]

Библиотека libusb позволяет осуществлять связь между компьютером (хостом) и USB устройством. Установка библиотеки libusb в WinXP хорошо описана в статье [4]. Поэтому вкратце остановлюсь на основных моментах, связанных с Qt. Для использования libusb в Qt проектах необходимо:

1. Скачайте библиотеку libusb-win32-bin-1.2.6.0 (или более свежую), см. [9] или возьмите distrib\libusb-win32-bin-1.2.6.0.zip из архива [10].
2. Распакуйте libusb-win32-bin-1.2.6.0.zip в любую папку, например, C:\temp.
3. Из папки \bin\x86 скопируйте файл libusb0_x86.dll в папку c:\WINDOWS\system32, и переименуйте в libusb0.dll, а файл libusb0.sys скопируйте в папку c:\WINDOWS\system32\drivers\ (процедура описана в файле \bin\libusb-win32-bin-README.txt).
4. В корне C:\ создайте каталог libusb и скопируйте туда папку \include. Папка include содержит заголовочные файлы, ссылающиеся на функции библиотеки libusb. Также создайте в каталоге libusb папку \lib и скопируйте туда файл \lib\gcc\libusb.a. Это двоичный код библиотеки libusb, который будет использоваться в программах Qt.
5. Скачайте драйвер фильтра libusb-win32-devel-filter-1.2.6.0, см. [9], или distrib\libusb-win32-devel-filter-1.2.6.0.exe. После запуска инсталлятора у Вас в системе появится программа мастера Filter Wizard. Она позволяет накладывать на устройства USB специальный драйвер фильтра. Он нужен для нормальной работы библиотеки libusb с устройствами USB. Процесс установки фильтра хорошо описан в [4].

Теперь немного о системе лицензирования Qt. В настоящее время существуют бесплатная (с лицензией LGPL) и коммерческая версии Qt. Между ними есть отличия в функционале [5]. В частности, в бесплатной версии нет возможности статической линковки. А это значит, что файлы библиотек, используемых в конкретном проекте, приходится вручную складывать в папку с программой. Иначе она не запустится на другом компьютере (где не была установлена Qt). Если просто вручную скопировать все необходимые dll в каталог исполняемого файла программы Qt, то можно перенести скомпилированную программу на другой компьютер (об этом далее).

Для разработки проектов, описанных здесь, применялся пакет QtSDK 1.2.1 [6]. Его установка не вызывает проблем [7]. Нужно просто скачать инсталлятор (доступен в offline и online режимах работы, см. скриншот окна браузера).

После того, как скачаете пакет инсталлятора QT, запустите его. В окне выбора элементов установки нужно не забыть выбрать установку компилятора MinGW (расставьте галочки, как на скриншоте ниже, у пунктов Desktop -> Qt 4.8.1 -> Desktop Qt 4.8.1 — MinGW).

[Управляемое из Qt устройство USB HID]

Для создания готового устройства USB удобно воспользоваться готовым решением, которое представлено в библиотеке V-USB [8] — пример простейшего устройства USB HID, проект hid-custom-rq (см. distrib\vusb-20121206.zip или папку firmware в архиве [10]). V-USB является реализацией драйвера USB для устройств на базе микроконтроллеров AVR, т. е. можно делать USB-устройства разных стандартных классов на обычных микроконтроллерах AVR. Программное обеспечение для этих устройств USB пишется на языке С.

Для получения исходного кода библиотеки V-USB вместе с примерами программ следует скачать архив с библиотекой vusb-20121206.zip с сайта obdev.at (или взять его в архиве [10], см. distrib\vusb-20121206.zip) и распаковать его в любом удобном месте. В директории с библиотекой нужно найти папку examples, а в ней hid-custom-rq. Исходный код для микроконтроллера AVR лежит в папке \examples\hid-custom-rq\firmware. Для того, чтобы Вы смогли скомпилировать исходный код AVR, Вам потребуется пакет WinAVR (инструментарий GCC для разработки программ на C для микроконтроллеров AVR). Процесс установки WinAVR и компиляция проекта подробно описана в статье [4]. Если Вы не хотите пока в этом разбираться, можете воспользоваться готовыми прошивками (файлы *.hex), которые находятся в папке firmware\hex архива [10].

В нашем случае макетная плата AVR-USB-MEGA16, прошитая firmware hid-custom-rq, и есть то USB устройство, которым будем управлять из Qt. Задача состоит в том, что бы научиться включать/выключать светодиод (он расположен на плате AVR-USB-MEGA16) с помощью сигналов, передаваемых по USB интерфейсу от компьютера. Эти сигналы будет обрабатывать микроконтроллер AVR, смонтированный на плате (ATmega32A).

[Консольный вариант ПО хоста на Qt]

Для создания консольного ПО хоста, достаточно код примеров из папки \examples\hid-custom-rq\commandline просто добавить в новый консольный проект Qt и сделать несколько настроек. Алгоритм создания консольной программы управления светодиодом по шагам:

1. В программе Qt Creator создайте новый проект вида «Простой проект на языке С».

2. Перенесите в проект файлы set-led.c и opendevice.c из папки \examples\hid-custom-rq\commandline\ в проект. Для этого используется окно проектов в окне Qt Creator. Нужно выбрать проект и щелкнуть правой кнопкой мышки. В появившемся меню выберите «Добавить существующие файлы».

3. В файле set-led.c удалите все имеющиеся директивы #include и замените их на

#include < stdio.h >
#include < stdlib.h >
#include < string.h >
#include "opendevice.h"
#include "requests.h"
#include "usbconfig.h"
#include < lusb0_usb.h >

4. В файл проекта Qt (имеет расширение .pro) добавьте строки

win32: LIBS += C:/libusb/lib/libusb.a
win32: INCLUDEPATH += C:/libusb/include
win32: DEPENDPATH += C:/libusb/include
win32: PRE_TARGETDEPS += C:/libusb/lib/libusb.a

Это позволит линковщику найти правильные пути к файлам заголовков (*.h) и к двоичному коду библиотеки libusb (файл libusb.a). Убедитесь, что указанные здесь пути соответствуют реально существующим.

5. Скопируйте заголовочные файлы opendevice.h из папки \examples\hid-custom-rq\commandline\ и файлы requests.h, usbconfig.h из папки \examples\hid-custom-rq\firmware\ в папку C:\libusb\include (которая была ранее создана на диске и добавлена в пути файла проекта Qt). В файле opendevice.h замените строку «#include < usb.h >» на «#include < lusb0_usb.h >»:

//#include < usb.h > 
#include < lusb0_usb.h >

6. Теперь проект готов к компиляции. Зайдите в меню «Сборка» и выберите «Собрать все». Затем в том же меню – Запустить.

Для передачи в командную строку параметров вызова программы setled (status, on, off) нужно указать их в поле «Параметры» во вкладке «Проекты->Запустить».

Вид консольного окна для работы с программой set-led-console.exe:

[Создание ПО хоста Qt с графическим интерфейсом (GUI)]

Среда Qt предоставляет широкие возможности для создания пользовательского интерфейса. Для этого можно использовать специальную утилиту Qt Designer. Но в данном случае удобно использовать классы компоновки Qt. Они представляют собой своеобразный холст, на котором располагаются все интерфейсные элементы. Кроме того, классы компоновки содержат в себе методы, задающие взаимное расположение элементов. Более подробную информацию о компоновках Qt можно найти в книге [3].

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

1. Создайте новый проект «Qt Widget->GUI приложение Qt» на основе базового класса QDialog.

Название файла исходников можно заменить на dialog.cpp. Галочку «Создать форму» нужно убрать. Таким образом будет создан новый проект. В нем уже есть готовые файлы main.cpp, dialog.cpp, dialog.h, SetLedGUI.pro.

2. В файле main.cpp добавьте директивы #include:

#include "opendevice.h"
#include "requests.h"
#include "usbconfig.h"
#include < lusb0_usb.h >

3. В функцию main необходимо поместить код для инициализации устройства:

usb_dev_handle *handle = NULL;      //указатель на устройство
const unsigned char rawVid[2] = {USB_CFG_VENDOR_ID}, 
            rawPid[2] = {USB_CFG_DEVICE_ID};
char vendor[] = {USB_CFG_VENDOR_NAME, 0}, 
        product[]={USB_CFG_DEVICE_NAME, 0};
int vid, pid;
usb_init();
vid = rawVid[1] * 256 + rawVid[0];
pid = rawPid[1] * 256 + rawPid[0];
 
// Функция usbOpenDevice реализована в модуле opendevice.c.
if(usbOpenDevice(&handle, vid, vendor, pid, product, NULL, NULL, NULL) != 0)
{
   int n = QMessageBox::critical(0, "Error",
           QString("Could not find USB device with \
           vid=0x%1 pid=0x%2 ").arg(vid,0,16).arg(pid,0,16), QMessageBox::Cancel); if (n==QMessageBox::Cancel) exit(1); }

4. Вся логика программы реализована в слоте SetLEDSlot(void) (что такое слоты и сигналы Qt, см. в [3] или в справочной документации [1, 2]).

При каждом нажатии на кнопку в МК посылается запрос — горит ли светодиод (LED)?

сnt = usb_control_msg(Dev,
                      USB_TYPE_VENDOR|USB_RECIP_DEVICE|USB_ENDPOINT_IN, 
                      CUSTOM_RQ_GET_STATUS,
                      0,
                      0,
                      buffer,
                      sizeof(buffer),
                      5000);

По результатам запроса выставляется флаг isOn:

isOn = buffer[0] ? 0: 1;

Затем посылается команда на включение или выключение светодиода.

cnt = usb_control_msg(Dev,
                      USB_TYPE_VENDOR|USB_RECIP_DEVICE|USB_ENDPOINT_OUT,
                      CUSTOM_RQ_SET_STATUS,
                      isOn,
                      0,
                      buffer,
                      0,
                      5000);

5. Для создания интерфейса используется класс компоновки QHBoxLayout.

В конструкторе класса dialog происходит инициализация интерфейса и соединение сигнала нажатия кнопки со слотом SetLEDSlot().

Dialog::Dialog(usb_dev_handle* handleDev,QWidget *parent)
    : QDialog(parent, Qt::WindowCloseButtonHint)
{
  Dev = handleDev;                           // инициализация устройства
  SetLEDButton = new QPushButton("Set LED"); // создание кнопки
  QHBoxLayout* MainL = new QHBoxLayout;      // создание компоновки
  MainL->addWidget(SetLEDButton);            // располагаем кнопки на компоновке
  setLayout(MainL);
  // соединение сигнала нажатия кнопки со слотом обработки
  connect(SetLEDButton, SIGNAL(clicked()), this, SLOT(SetLEDSlot())); 
}

Вот и вся программа. Компиляция GUI-проекта Qt проводится точно так же, как и для консольного варианта. Если все собрано верно, то после запуска выполняемого файла (software\GUI\exe\release\set-led-gui.exe) появится маленькое окошко с кнопкой. Если её нажимать, то будет зажигаться и гаснуть светодиод на подключенной макетной плате AVR-USB-MEGA16.

[Как сделать программу Qt переносимой]

Полезно знать — что нужно сделать, чтобы можно было готовую скомпилированную программу Qt перенести на другой компьютер (с сохранением работоспособности, конечно). Обычно для этого может использоваться статическая линковка всех используемых библиотек Qt, либо создание инсталлятора, который позволит автоматически установить на компьютере все нужные библиотеки Qt. Как уже было упомянуто выше, бесплатная версия Qt не позволяет осуществлять статическую линковку. Это конечно неудобно. Не устанавливать же Qt на каждом компьютере, где вы собираетесь запускать программу! В Интернете умельцы описывают различные способы исправления этого недостатка (естественно без покупки лицензии). Но если не стремиться к «красивым решениям», то можно просто скопировать все используемые библиотеки, с которыми связан проект, в одну папку с программой (где находится исполняемый файл *.exe), и уже эту папку переносить на любой компьютер в любое удобное место (обычно это место c:\Program Files).

Для определения зависимостей от библиотек существуют специальные программы (например, Dependency Walker [11]). Некоторые из сборок популярного файлового менеджера TotalCommander также позволяют узнать зависимости файлов exe (через встроенный просмотрщик файлов). Запустите Total Commander, установите курсор на интересующей программе и нажмите F3. На экране появится окошко, где нужно выбрать вкладку «Dll Dependency». В списке указаны пути к файлам библиотек, которые использует программа при работе. Теперь их легко найти и скопировать в папку с исполняемым файлом exe.

В архиве [10] предоставлены исходные коды проектов Qt и откомпилированные версии программ, вместе со всеми библиотеками.

[Ссылки]

1. Qt Documentation site:qt-project.org.
2. Qt документация (на русском языке) site:doc.crossplatform.ru
3. М. Шлее Qt 4.5 Профессиональное программирование на С++.
4. Разработка устройства USB — как начать работу с библиотеками V-USB и libusb.
5. Почему выбирают коммерческую лицензию Qt? site:digia.com.
6. Qt SDK 1.2.1 site:developer.nokia.com.
7. Установка Qt SDK под Windows site:github.com.
8. V-USB site:ru.wikipedia.org, V-USB site:obdev.at.
9. libusb-win32 site:sourceforge.net.
10. 130705QT-and-LibUSB.zip — архив с документацией, исходным кодом, библиотеками, прошивками микроконтроллера AVR.
11. Dependency Walker — помощник в разрешении зависимостей.

функционал, версии, установка и особенности работы

От автора: что такое PyQt? PyQt — это привязка Python с открытым исходным кодом для виджет-инструментария Qt, который также функционирует как кросс-платформенная среда разработки приложений. Qt — это популярная среда C ++ для написания приложений с помощью графического интерфейса для всех основных настольных, мобильных и встраиваемых платформ (поддерживает Linux, Windows, MacOS, Android, iOS, Raspberry Pi и многие другие).

PyQt разрабатывается и поддерживается Riverbank Computing, компанией, базирующейся в Англии, а Qt — финской фирмой The Qt Company.

В этом руководстве по PyQT мы рассмотрим:

Что такое PyQt?

Функции PyQT

Бесплатный курс «Python. Быстрый старт»

Получите курс и узнайте, как создать программу для перевода текстов на Python

Получить курс

Версии PyQt

Как установить PyQt

Основные понятия и программы PyQt

Компоненты и виджеты

Темы

Функци PyQT

PyQt состоит из более чем шести сотен классов, охватывающих ряд функций, таких как:

Графические пользовательские интерфейсы

Базы данных SQL

Веб-инструментарий

Обработка XML

Сети

Эти функции можно комбинировать для создания расширенных пользовательских интерфейсов, а также автономных приложений. Многие крупные компании из различных отраслей используют PyQt: LG, Mercedes, AMD, Panasonic, Harman и т. д.

Версии PyQt

PyQt доступен в двух редакциях: PyQt4 и PyQt5. PyQt4 предоставляет связующий код для привязки версий Qx 4.x и 5.x, в то время как PyQt5 обеспечивает привязку только для версий 5.x. В результате PyQt5 не имеет обратной совместимости с устаревшими модулями более ранней версии. В этом руководстве будет использоваться для демонстрации примеров PyQt5. Помимо этих двух версий, Riverbank Computing также предоставляет PyQt3D — привязки python для инфраструктуры Qt3D. Qt3D — это прикладная среда, используемая для создания систем моделирования в реальном времени с 2D / 3D рендерингом.

Как установить PyQt

Есть два способа установки PyQt.

Использование файлов Wheel

Сборка и установка из исходного кода

Qt (произносится «кьют») — сложная система, а база кода PyQt содержит скомпилированный код C ++ и Python. В результате по сравнению с другими библиотеками Python это сложный процесс для сборки и установки из исходного кода. Тем не менее, вы можете легко установить PyQt5 с помощью Wheel.

Установка с помощью Wheel

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

Итак, если у вас установлен Python 3.4 или более поздней версии, у вас уже есть pip. Однако, если вы используете более старую версию Python, вам нужно скачать и установить pip, прежде продолжать. Вы можете найти инструкции по установке по этой ссылке: //pypi.org/project/pip/.

Чтобы установить PyQt5:

Шаг 1) Откройте командную строку или PowerShell на компьютере с Windows.

Шаг 2) Введите следующее:

Этот шаг загрузит пакет PyQt5 whl (около 50 МБ) и установит его в вашей системе.

Кроме того, вы также можете загрузить двоичный файл Windows для версии Python, установленной на вашем компьютере. После завершения перейдите к следующему разделу, чтобы написать свое первое приложение с помощью графического интерфейса.

Основные понятия и программы PyQt

Теперь, когда вы успешно установили PyQt5 на компьютер, вы готовы писать приложения на python с помощью графического интерфейса. Давайте начнем с простого приложения, которое будет отображать пустое окно на экране. Запустите Python IDLE и введите следующее:

import sys from PyQt5.QtWidgets import QApplication, QWidget if __name__ == «__main__»: app = QApplication(sys.argv) w = QWidget() w.resize(300,300) w.setWindowTitle(‘Guru99’) w.show() sys.exit(app.exec_())

import sys

from PyQt5.QtWidgets import QApplication, QWidget

if __name__ == «__main__»:

    app = QApplication(sys.argv)

    w = QWidget()

    w.resize(300,300)

    w.setWindowTitle(‘Guru99’)

    w.show()

    sys.exit(app.exec_())

Сохраните его как app.py (имя не имеет значения) и нажмите F5, чтобы запустить программу. Или просто дважды кликните на сохраненном файле, чтобы запустить приложение. Если вы все сделали правильно, откроется новое окно с заголовком Guru99, как показано ниже.

Здорово! Работает. Это не так много, но достаточно, чтобы понять основы. Теперь давайте рассмотрим подробно, что делает каждая из строк в программе.

from PyQt5.QtWidgets import QApplication, QWidget

from PyQt5.QtWidgets import QApplication, QWidget

Этот оператор импортирует все модули, необходимые для создания GUI, в текущее пространство имен. Модуль QtWidgets содержит все основные виджеты, которые вы будете использовать в этом руководстве.

app = QApplication(sys.argv)

app = QApplication(sys.argv)

Здесь вы создаете объект класса QApplication. Этот шаг необходим для PyQt5; каждое приложение пользовательского интерфейса должно создавать экземпляр QApplication в качестве своего рода точки входа в приложение. Если вы не создадите его, будут выданы ошибки.

sys.argv — это список параметров командной строки, которые вы можете передать приложению при запуске через оболочку или при автоматизации интерфейса.

В этом примере вы не передали аргументы QApplications. Следовательно, вы также можете заменить его приведенным ниже кодом и даже не импортировать модуль sys.

app = QApplication([]) w = QWidget()

app = QApplication([])

w = QWidget()

Далее мы создаем объект класса QWidget. QWidget является базовым классом всех объектов пользовательского интерфейса в Qt, и практически все, что вы видите в приложении, является виджетом. Это включает в себя диалоговые окна, тексты, кнопки, панели и так далее. Функция, которая позволяет проектировать сложные пользовательские интерфейсы, основывается на том, что виджеты могут быть вложенными, то есть вы можете иметь виджет внутри виджета, который находится внутри еще одного виджета. Вы увидите это в действии в следующем разделе.

Метод resize класса QWidget позволяет устанавливать размеры любого виджета. В этом случае вы изменили размер окна на 300 * 300 пикселей. Здесь вы должны помнить, что виджеты могут быть вложены вместе, внешний виджет (т. е. виджет без родителя) называется окном.

w.setWindowTitle(‘Guru99’)

w.setWindowTitle(‘Guru99’)

Метод setWindowTitle () позволяет передать строку в качестве аргумента, который установит заголовок окна переданной вами строке. В этом примере в строке заголовка будет отображаться Guru99.

show() просто отображает виджет на экране монитора.

Метод app.exec_() запускает цикл событий Qt / C ++. Как вы знаете, PyQt в основном написан на C ++ и использует механизм цикла событий для реализации параллельного выполнения. app.exec_() передает управление Qt, который выходит из приложения только тогда, когда пользователь закроет его графический интерфейс. Вот почему Ctrl + C не выполняет выход из приложения, как в других программах Python. Поскольку Qt контролирует приложение, события Python не обрабатываются, пока мы не настроим их внутри приложения. Также обратите внимание, что у метода exec есть подчеркивание в имени; это потому, что exec() уже является ключевым словом в python, а подчеркивание разрешает конфликт имен.

Заполнение окон

В предыдущем разделе мы рассмотрели, как в Qt создать базовый виджет. Теперь пришло время сделать несколько более сложных интерфейсов, с которыми пользователи могут по-настоящему взаимодействовать. Снова, запустите IDLE и напишите следующее.

import sys from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QPushButton, QMessageBox def dialog(): mbox = QMessageBox() mbox.setText(«Your allegiance has been noted») mbox.setDetailedText(«You are now a disciple and subject of the all-knowing Guru») mbox.setStandardButtons(QMessageBox.Ok | QMessageBox.Cancel) mbox.exec_() if __name__ == «__main__»: app = QApplication(sys.argv) w = QWidget() w.resize(300,300) w.setWindowTitle(‘Guru99’) label = QLabel(w) label.setText(«Behold the Guru, Guru99») label.move(100,130) label.show() btn = QPushButton(w) btn.setText(‘Beheld’) btn.move(110,150) btn.show() btn.clicked.connect(dialog) w.show() sys.exit(app.exec_())

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

import sys

from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QPushButton, QMessageBox

 

def dialog():

    mbox = QMessageBox()

 

    mbox.setText(«Your allegiance has been noted»)

    mbox.setDetailedText(«You are now a disciple and subject of the all-knowing Guru»)

    mbox.setStandardButtons(QMessageBox.Ok | QMessageBox.Cancel)

            

    mbox.exec_()

 

if __name__ == «__main__»:

    app = QApplication(sys.argv)

    w = QWidget()

    w.resize(300,300)

    w.setWindowTitle(‘Guru99’)

    

    label = QLabel(w)

    label.setText(«Behold the Guru, Guru99»)

    label.move(100,130)

    label.show()

 

    btn = QPushButton(w)

    btn.setText(‘Beheld’)

    btn.move(110,150)

    btn.show()

    btn.clicked.connect(dialog)

 

    

    w.show()

    sys.exit(app.exec_())

Сохраните файл как appone.py или как угодно и нажмите F5, чтобы запустить программу. Если вы не допустили ошибок, IDLE откроет новое окно с текстом и кнопкой, как показано ниже.

Как только вы нажмете кнопку в первом окне, откроется новое окно сообщения с текстом, который вы написали. Теперь вы можете нажать кнопку Hide Details/Show Details, чтобы переключить видимость дополнительного текста.

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

from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QPushButton, QMessageBox

from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QPushButton, QMessageBox

Это импортирует еще несколько виджетов, которые вы использовали в этом примере, а именно QLabel, QPushButton и QMessageBox.

def dialog(): mbox = QMessageBox() mbox.setText(«Your allegiance has been noted») mbox.setDetailedText(«You are now a disciple and subject of the all-knowing Guru») mbox.setStandardButtons(QMessageBox.Ok | QMessageBox.Cancel) mbox.exec_()

def dialog():

    mbox = QMessageBox()

 

    mbox.setText(«Your allegiance has been noted»)

    mbox.setDetailedText(«You are now a disciple and subject of the all-knowing Guru»)

    mbox.setStandardButtons(QMessageBox.Ok | QMessageBox.Cancel)

            

    mbox.exec_()

Здесь вы определили метод с именем dialog, который создает виджет окна сообщения и устанавливает некоторый текст для кнопок и других полей.

Метод dialog вызывается из основного блока программы, когда кнопка нажимается в определенном виджете (в данном случае, btn PushButton). Событие клика, запущенное этой кнопкой, вызывает выполнение этой функции. Такая функция называется в Qt слотом, вы узнаете больше о сигналах и слотах в следующих разделах.

if __name__ == «__main__»: app = QApplication(sys.argv) w = QWidget() w.resize(300,300) w.setWindowTitle(‘Guru99’)

if __name__ == «__main__»:

    app = QApplication(sys.argv)

    w = QWidget()

    w.resize(300,300)

    w.setWindowTitle(‘Guru99’)

Это основной раздел приложения, и, как и в предыдущем примере, вы начинаете с создания экземпляра QApplication, за которым следует простой виджет, это экземпляр QWidget.

label = QLabel(w) btn = QPushButton(w)

label = QLabel(w)

btn = QPushButton(w)

Мы добавили два новых виджета в это приложение: QLabel и QPushButton. QLabel используется для вывода нередактируемого текста или заполнителей внутри виджета, тогда как QPushButton используется для создания кликабельной кнопки.

Здесь важно заметить, что при создании объектов label и btn вы передаете объект окна (w) конструкторам QLabel и QPushButton. Вот как работает вложение в PyQt5. Чтобы создать виджет внутри другого виджета, вы передаете ссылку на родительский виджет в конструктор дочернего элемента.

label.move(100,130) btn.move(110,150)

label.move(100,130)

btn.move(110,150)

move() используется для установки позиции виджета относительно его родительского виджета. В первом случае метка будет перемещена на 100 пикселей с левой стороны и на 130 пикселей сверху окна.

Точно так же кнопка будет размещена на 110 пикселей слева и на 150 пикселей сверху окна. Этот пример является грубым способом создания макетов и обычно не используется в производстве; он включен только для учебных целей. Qt поддерживает различные макеты, которые мы детально рассмотрим в следующих разделах этого руководства.

btn.clicked.connect(dialog)

btn.clicked.connect(dialog)

Наконец, это пример сигналов и слотов в Qt. В приложениях на основе графического интерфейса функции выполняются на основе действий, запускаемых пользователем, таких как наведение на элемент или нажатие кнопки. Эти действия называются событиями. Напомним, что метод app.exec_() передает управление в цикл обработки событий Qt. Для этого и предназначен цикл событий: прослушивать события и выполнять в ответ действия.

Каждый раз, когда происходит событие, например, когда пользователь нажимает кнопку, соответствующий виджет Qt генерирует сигнал. Эти сигналы могут быть подключены к функциям Python (например, к функции диалога в этом примере), чтобы функция выполнялась при срабатывании сигнала. Эти функции в Qt lingo называются слотами. Основной синтаксис для запуска функции слота в ответ на сигнал от события выглядит следующим образом:

widget.signal.connect(slot)

widget.signal.connect(slot)

Это означает, что всякий раз, когда сигнал запускается виджетом , будет выполняться функция подключенного слота. Таким образом, Qt использует сигналы и слоты для связи между объектами и облегчения повторного использования и интерактивности компонентов.

Теперь, когда вы знаете, как вкладывать виджеты и реализовывать взаимодействия с помощью сигналов и слотов, вот список полезных виджетов и других классов, которые вы можете использовать в приложениях PyQt.

Компоненты и виджеты

В PyQt доступно большое количество виджетов для создания приложений с помощью графического интерфейса. Однако в PyQt5 была произведены реорганизация классов в другие модули и ревизии в лицензиях.

Поэтому очень важно иметь общее представление о структуре PyQt5. В этом разделе мы рассмотрим, как PyQt5 организован внутри, и вы узнаете о различных модулях, библиотеках и классах API, предоставляемых PyQt5.

Структура каталогов PyQt5

Бесплатный курс «Python. Быстрый старт»

Получите курс и узнайте, как создать программу для перевода текстов на Python

Получить курс

Это фундаментальные модули, используемые связыванием Qt в Python, в частности в PyQt5.

Qt: Он объединяет все классы / модули, упомянутые ниже, в один модуль. Это значительно увеличивает объем памяти, используемой приложением. Однако управлять инфраструктурой проще, импортируя только один модуль.

QtCore: Содержит основные неграфические классы, используемые другими модулями. Именно здесь реализуются цикл событий Qt, сигналы, возможность подключения к слотам и т. д.

QtWidgets: Содержит большинство виджетов, доступных в Pyqt5.

QtGui: Содержит компоненты графического интерфейса и расширяет модуль QtCore.

QtNetwork: Содержит классы, используемые для реализации сетевого программирования через Qt. Он поддерживает TCP-серверы, TCP-сокеты, UDP-сокеты, обработку SSL, сетевых сеансов и поиск DNS.

QtMultimedia: Предоставляет низкоуровневый мультимедийный функционал.

QtSql: реализует интеграцию базы данных для баз данных SQL. Поддерживает ODBC, MySQL, Oracle, SQLite и PostgreSQL.

Виджеты PyQt5

Вот список наиболее часто используемых виджетов PyQt5:

QLineEdit: Это поле ввода, которое позволяет пользователю вводить одну строку текста.

QRadioButton: Это поле ввода с выбираемой кнопкой, аналогичное переключателям в html.

rad = QRadioButton(«button title») rad.setChecked(True) #to select the button by default.

rad = QRadioButton(«button title»)

rad.setChecked(True)  #to select the button by default.

QComboBox: Используется для отображения выпадающего меню со списком выбираемых элементов.

drop = QComboBox(w) drop.addItems([«item one», «item two», «item three»])

drop = QComboBox(w)

drop.addItems([«item one», «item two», «item three»])

QCheckBox: Отображает выбираемое квадратное поле перед меткой, которая отмечена, если выбрана, аналогично переключателям.

check = QCheckBox(«button title»)

check = QCheckBox(«button title»)

QMenuBar: Отображает горизонтальную строку меню в верхней части окна. Вы можете добавить в эту панель только объекты класса QMenu. Эти объекты QMenu могут дополнительно содержать строки, объекты QAction или другие объекты QMenu.

QToolBar: Это горизонтальная панель или панель, которую можно перемещать в пределах окна. Может содержать кнопки и другие виджеты.

QTab: Используется для разбиения содержимого окна на несколько страниц, к которым можно получить доступ через разные вкладки в верхней части виджета. Он состоит из двух разделов: панель вкладок и страница вкладок.

QScrollBar: Используется для создания полос прокрутки, которые позволяют пользователю прокручивать вверх и вниз в пределах окна. Он состоит из подвижного ползунка, дорожки ползунка и двух кнопок для прокрутки ползунка вверх или вниз.

QSplitter: Разделители используются для разделения содержимого окна, чтобы виджеты были сгруппированы правильно и не выглядели нагроможденными. QSplitter является одним из основных обработчиков макетов, доступных в PyQt5, и используется для разделения содержимого как по горизонтали, так и по вертикали.

QDock: виджет-док — это подокно с двумя свойствами: оно может быть перемещено в главное окно и его можно закрепить за пределами родительского окна в другом месте на экране.

Макеты и темы

В предыдущих примерах мы использовали только методы move() и resize() для установки позиций виджетов в графическом интерфейсе.

Тем не менее, PyQt имеет мощный механизм управления компоновкой, который можно использовать для создания расширенных пользовательских интерфейсов приложений. В этом разделе вы узнаете о двух важных классах, которые используются в Qt для создания и управления макетами: QBoxLayout и QGridLayout.

QBoxLayout

QBoxLayout используется для выравнивания дочерних виджетов макета в горизонтальной или вертикальной строке. Два основных класса, которые наследуются от QBoxLayout, это:

QHBoxLayout: используется для выравнивания дочерних виджетов по горизонтали.

QVBoxLayout: используется для выравнивания дочерних виджетов по вертикали.

Например, так будут выглядеть три кнопки, выровненные по QHBoxLayout.

import sys from PyQt5.QtWidgets import * if __name__ == «__main__»: app = QApplication([]) w = QWidget() w.setWindowTitle(«Musketeers») btn1 = QPushButton(«Athos») btn2 = QPushButton(«Porthos») btn3 = QPushButton(«Aramis») hbox = QHBoxLayout(w) hbox.addWidget(btn1) hbox.addWidget(btn2) hbox.addWidget(btn3) w.show() sys.exit(app.exec_())

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

import sys

from PyQt5.QtWidgets import *

 

if __name__ == «__main__»:

 

    app = QApplication([])

    w = QWidget()

    w.setWindowTitle(«Musketeers»)

 

    btn1 = QPushButton(«Athos»)

    btn2 = QPushButton(«Porthos»)

    btn3 = QPushButton(«Aramis»)

 

    hbox = QHBoxLayout(w)

 

    hbox.addWidget(btn1)

    hbox.addWidget(btn2)

    hbox.addWidget(btn3)

 

    w.show()

 

    sys.exit(app.exec_())

А вот как они будут выглядеть в QVBoxLayout.

import sys from PyQt5.QtWidgets import * if __name__ == «__main__»: app = QApplication([]) w = QWidget() w.setWindowTitle(«Musketeers») btn1 = QPushButton(«Athos») btn2 = QPushButton(«Porthos») btn3 = QPushButton(«Aramis») vb = QVBoxLayout(w) vb.addWidget(btn1) vb.addWidget(btn2) vb.addWidget(btn3) w.show() sys.exit(app.exec_())

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

import sys

from PyQt5.QtWidgets import *

 

if __name__ == «__main__»:

 

    app = QApplication([])

    w = QWidget()

    w.setWindowTitle(«Musketeers»)

 

    btn1 = QPushButton(«Athos»)

    btn2 = QPushButton(«Porthos»)

    btn3 = QPushButton(«Aramis»)

 

    vb = QVBoxLayout(w)

 

    vb.addWidget(btn1)

    vb.addWidget(btn2)

    vb.addWidget(btn3)

 

    w.show()

 

    sys.exit(app.exec_())

Единственная функция, которая нуждается в каком-либо объяснении на данный момент, это метод addWidget(). Он используется для вставки виджетов в макет HBox или VBox. Он также используется в других макетах, где принимает другое количество параметров, как вы увидите в следующем разделе. Виджеты отображаются внутри макета в том порядке, в котором вы их вставляете.

QGridLayout

QGridLayout используется для создания интерфейсов, в которых виджеты расположены в виде сетки (например, матрицы или 2D-массива). Чтобы вставить элементы в сетку, вы можете использовать матричное представление, чтобы определить количество строк и столбцов в сетке, а также положение этих элементов.

Например, чтобы создать сетку 3 * 3 (т.е. сетку с тремя строками и тремя столбцами), вы пишите следующий код:

import sys from PyQt5.QtWidgets import * if __name__ == «__main__»: app = QApplication([]) w = QWidget() grid = QGridLayout(w) for i in range(3): for j in range(3): grid.addWidget(QPushButton(«Button»),i,j) w.show() sys.exit(app.exec_())

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

import sys

from PyQt5.QtWidgets import *

 

if __name__ == «__main__»:

    app = QApplication([])

 

    w = QWidget()

 

    grid = QGridLayout(w)

 

    for i in range(3):

        for j in range(3):

            grid.addWidget(QPushButton(«Button»),i,j)

 

 

    w.show()

    sys.exit(app.exec_())

Вывод будет следующий:

Метод addWidget() в макете сетки принимает следующие аргументы:

Объект виджета, который вы хотите добавить в сетку

X-координата объекта

Y-координата объекта

Диапазон строк (по умолчанию = 0)

Col-span (по умолчанию = 0)

Чтобы лучше это понять, вы можете вручную вставить каждый виджет, как показано ниже:

import sys from PyQt5.QtWidgets import * if __name__ == «__main__»: app = QApplication([]) w = QWidget() grid = QGridLayout(w) grid.addWidget(QPushButton(«Button one»),0,0) grid.addWidget(QPushButton(«Button two»),0,1) grid.addWidget(QPushButton(«Button three»),1,0) grid.addWidget(QPushButton(«Button four»),1,1) w.show() sys.exit(app.exec_())

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

import sys

from PyQt5.QtWidgets import *

 

if __name__ == «__main__»:

    app = QApplication([])

 

    w = QWidget()

 

    grid = QGridLayout(w)

    grid.addWidget(QPushButton(«Button one»),0,0)

    grid.addWidget(QPushButton(«Button two»),0,1)

    grid.addWidget(QPushButton(«Button three»),1,0)

    grid.addWidget(QPushButton(«Button four»),1,1)

 

 

    w.show()

    sys.exit(app.exec_())

Вот как будет выглядеть сетка:

Вы также можете передать параметры rowspan и colspan в addWidget(), чтобы охватить более одной строки или столбца.

grid.addWidget(QPushButton(«Button five»),2,0,1,0)

grid.addWidget(QPushButton(«Button five»),2,0,1,0)

Это создаст кнопку, которая растягивается на оба столбца.

Темы

PyQt5 поставляется с некоторыми встроенными темами, которые вы можете использовать в приложениях. Метод setStyle(), вызываемый в экземпляре QApplication, используется для установки определенной темы для вашего приложения. Например, добавление следующей строки кода изменит тему приложения по умолчанию на Fusion:

Так будет выглядеть предыдущий пример в теме Fusion.

Еще одна полезная функция для создания тем приложений — это метод setPalette(). Вот код для изменения цвета различных виджетов с помощью setPalette().

import sys from PyQt5.QtCore import Qt from PyQt5.QtWidgets import * from PyQt5.QtGui import QPalette if __name__ == «__main__»: app = QApplication([]) app.setStyle(«Fusion») qp = QPalette() qp.setColor(QPalette.ButtonText, Qt.black) qp.setColor(QPalette.Window, Qt.black) qp.setColor(QPalette.Button, Qt.gray) app.setPalette(qp) w = QWidget() grid = QGridLayout(w) grid.addWidget(QPushButton(«Button one»),0,0) grid.addWidget(QPushButton(«Button two»),0,1) grid.addWidget(QPushButton(«Button three»),1,0) grid.addWidget(QPushButton(«Button four»),1,1) w.show() sys.exit(app.exec_())

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

import sys

from PyQt5.QtCore import Qt

from PyQt5.QtWidgets import *

from PyQt5.QtGui import QPalette

 

if __name__ == «__main__»:

    app = QApplication([])

    app.setStyle(«Fusion»)

    

    qp = QPalette()

    qp.setColor(QPalette.ButtonText, Qt.black)

    qp.setColor(QPalette.Window, Qt.black)

    qp.setColor(QPalette.Button, Qt.gray)

    app.setPalette(qp)

 

    w = QWidget()

 

    grid = QGridLayout(w)

    grid.addWidget(QPushButton(«Button one»),0,0)

    grid.addWidget(QPushButton(«Button two»),0,1)

    grid.addWidget(QPushButton(«Button three»),1,0)

    grid.addWidget(QPushButton(«Button four»),1,1)

 

 

    w.show()

    sys.exit(app.exec_())

Вот результат:

Чтобы использовать метод setPalette(), сначала нужно определить палитру. Это делается путем создания объекта класса QPalette.

Обратите внимание, что класс QPalette принадлежит модулю QtGui, и вам нужно будет импортировать его, чтобы это работало. Создав объект QPalette, используйте метод setColor(), чтобы передать имя виджета, цвет которого вы хотите изменить, и цвет, который вы хотите установить.

qp.setColor(QPalette.Window, Qt.black)

qp.setColor(QPalette.Window, Qt.black)

Это изменит цвет окна на черный. После того, как вы определили цветовую схему, используйте функцию setPalette(), чтобы применить палитру к приложению.

Это все, что вам нужно сделать, если вы хотите создать базовые темы для своего приложения. PyQt также позволяет использовать таблицы стилей для определения внешнего вида виджетов. Если вы знакомы с CSS, вы можете легко определить расширенные стили для приложения, используя таблицы стилей Qt.

Заключение

PyQt — это привязка Python для инфраструктуры пользовательского интерфейса C ++, Qt.

PyQt4 и PyQt5 — две основные версии, разработанные Riverbank Computing.

Основными модулями платформы PyQt являются: Qt, QtCore, QtWidgets, QtGui, QtSql, QtNetwork

PyQt поддерживает различные виджеты, такие как: Кнопки, Текстовые метки, Текстовые поля, Переключатели и чек-боксы, Панели инструментов и строки меню, Webkit, Вкладки, Доки

В PyQt интерактивность реализована с использованием сигналов и слотов.

Событие это действие, которое выполняется пользователем в графическом интерфейсе (например, нажатие кнопки).

Сигнал передается в соответствующий виджет, когда в нем происходит событие.

Слот является функцией, которая подключается к сигналу и выполняет при повышении сигнала.

PyQt имеет надежный механизм компоновки и поддерживает расширенный дизайн макета и управление им. Это две часто используемые схемы компоновки в PyQt: Макет блока, Макет сетки

PyQt позволяет создавать собственные темы для приложения с графическим интерфейсом и имеет встроенную поддержку таблиц стилей.

PyQt может использоваться для создания пользовательских интерфейсов, а также автономных приложений.

Источник: //www.guru99.com

Редакция: Команда webformyself.

Бесплатный курс «Python. Быстрый старт»

Получите курс и узнайте, как создать программу для перевода текстов на Python

Получить курс

Pyqt5 документация на русском

Я начинаю перевод серии уроков PyQt5 от zetcode.

PyQt5 — это набор Python библиотек для создания графического интерфейса на базе платформы Qt5 от компании Digia.

Он доступен для Python 2.x и 3.x. Этот учебник использует Python 3.

Библиотека Qt является одной из самых мощных библиотек GUI (графического интерфейса пользователя).

Установить PyQt5 на Windows можно с официального сайта библиотеки.

Установить PyQt5 на linux-системы можно с помощью любого менеджера пакетов:

PyQt5 реализован в виде набора python-модулей. Эта библиотека имеет более 620 классов и 6000 функций и методов.

Это мультиплатформенная библиотека, которая работает на всех основных операционных системах, в том числе Unix, Windows и Mac OS.

Простой пример

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

PyQt5 является инструментом высокого уровня. Если бы мы писали это на более низком уровне, следующий пример кода легко мог бы растянуться на сотни строк:

Приведенный выше код показывает небольшое окно на экране.

Здесь мы делаем необходимые импорты. Основные виджеты расположены в PyQt5.QtWidgets.

Каждое приложение PyQt5 должно создать объект приложения (экземпляр QApplication). Параметр sys.argv это список аргументов командной строки. Скрипты Python можно запускать из командной строки. Это способ, которым мы можем контролировать запуск наших сценариев.

Виджет QWidget это базовый класс для всех объектов интерфейса пользователя в PyQt5. Мы предоставляем конструктор по умолчанию для QWidget. Конструктор по умолчанию не имеет родителя. Виджет без родителей называется окно.

Метод resize() изменяет размеры виджета. Он стал 250 пикселей в ширину и 150 в высоту.

Метод move() двигает виджет на экране на координату x=300, y=300.

Здесь мы задаём заголовок нашего окна.

Метод show() отображает виджет на экране. Виджет сначала создаётся в памяти, и только потом (с помощью метода show) показывается на экране.

Наконец, мы попадаем в основной цикл приложения. Обработка событий начинается с этой точки. Основной цикл получает события от оконной системы и распределяет их по виджетам приложения. Основной цикл заканчивается, если мы вызываем метод exit() или главный виджет уничтожен. Метод sys.exit() гарантирует чистый выход. Вы будете проинформированы, как завершилось приложение.

Метод exec_ () имеет подчеркивание. Это происходит потому, что exec является ключевым словом в python 2.

Значок приложения

Значок приложения — небольшое изображение, которое обычно отображается в верхнем левом углу заголовка. В следующем примере мы покажем, как сделать это в PyQt5. Мы также представим некоторые новые методы.

Не забудьте также скачать какую-нибудь иконку 🙂

Предыдущий пример был написан в процедурном стиле. Язык программирования Python поддерживает как процедурный, так и объектно-ориентированный стили программирования. Программирование в PyQt5 означает программирование в ООП.

Три важные вещи в объектно-ориентированном программировании это классы, данные и методы. Здесь мы создаем новый класс Example. Класс Example наследуется от класса QWidget. Это означает, что мы вызываем два конструктора: первый для класса Example и второй для родительского класса. Функция super() возвращает родительский объект Example с классом, и мы вызываем его конструктор.

Создание GUI делегируется методу initUI().

Все три метода были унаследованы от класса QWidget.

Метод setGeometry() делает две вещи: помещает окно на экране и устанавливает его размер. Первые два параметра х и у — это позиция окна. Третий — ширина, и четвертый — высота окна. На самом деле, он сочетает в себе методы resize() и move() в одном методе.

Последний метод устанавливает иконку приложения. Чтобы сделать это, мы создали объект QIcon. QIcon получает путь к нашей иконке для отображения.

Создаются объекты application и Example. Запускается основной цикл.

Подсказки

Мы можем предоставить всплывающую подсказку для любого из виджетов.

В этом примере мы покажем подсказку для двух виджетов PyQt5.

Этот статический метод устанавливает шрифт, используемый для отображения подсказки. Мы используем шрифт 10px SansSerif.

Чтобы создать всплывающую подсказку, мы вызываем метод setToolTip(). Мы можем использовать форматирование текста.

Мы создаем виджет кнопки и устанавливаем подсказку для него.

Меняем размер кнопки и перемещаем относительно окна. Метод sizeHint() дает рекомендуемый размер для кнопки.

Закрытие окна

Очевидный способ закрыть окно, это нажать на крестик. В следующем примере мы покажем, как мы можем программно закрыть наше окно. Мы кратко рассмотрим сигналы и слоты.

В этом примере, мы создаем кнопку выхода. После нажатия на кнопку, приложение завершается.

Мы создаем кнопку. Кнопка является экземпляром класса QPushButton. Первый параметр конструктора — название кнопки. Вторым параметром является родительский виджет. Родительский виджет является виджетом Example, который наследуется от QWidget.

Система обработки событий в PyQt5 построена на механизме сигналов и слотов. Если мы нажмем на кнопку, вызовется сигнал «нажатие». Слот может быть слот Qt или любая Python функция.

QCoreApplication содержит главный цикл обработки; он обрабатывает и диспетчеризирует все события. Метод instance() дает нам его текущий экземпляр.

Обратите внимание, что QCoreApplication создается с QApplication. Сигнал «нажатие» подключен к методу quit(), который завершает приложение. Коммуникация осуществляется между двумя объектами: отправителя и приемника. Отправитель кнопка, приемник — объект приложения.

Message Box

По умолчанию, если мы нажмем на крестик, QWidget закрывается. Иногда мы хотим изменить это поведение по умолчанию, например, если у нас есть открытый файл, в котором мы сделали некоторые изменения. Мы показываем окно с сообщением для подтверждения действия.

Если мы закрываем QWidget, генерируется QCloseEvent. Чтобы изменить поведение виджета, нам нужно переопределить обработчик события closeEvent().

Мы показываем окно с сообщением и с двумя кнопками: Yes и No. Первая строка отображается в заголовке окна. Вторая строка является текстовым сообщением и отображается в диалоговом окне. Третий аргумент определяет комбинацию кнопок, появляющихся в диалоге. Последний параметр — кнопка по умолчанию. Это кнопка, на которой изначально установлен фокус клавиатуры. Возвращаемое значение хранится в переменной reply.

Здесь мы проверяем возвращаемое значение. Если мы нажмем на кнопку Yes, мы принимаем событие, которое приводит к закрытию виджета и приложения. В противном случае мы будем игнорировать событие закрытия.

Центрирование окна на экране

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

Класс QtWidgets.QDesktopWidget предоставляет информацию о компьютере пользователя, в том числе о размерах экрана.

Код, который будет центрировать окно, находится в нами созданном методе center().

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

Мы получаем разрешение экрана нашего монитора. И с этим разрешением, мы получаем центральную точку.

Наш прямоугольник уже имеет ширину и высоту. Теперь мы установили центр прямоугольника в центре экрана. Размер прямоугольника не изменяется.

Мы двигаем верхний левый угол окна приложения в верхний левый угол прямоугольника qr, таким образом, центрируя окно на нашем экране.

В этой части урока PyQt5 мы рассмотрели некоторые основы.

Игра Тетрис – одна из самых популярных когда-либо созданных компьютерных игр. Оригинальная игра была разработана и запрограммирована русским программистом Алексеем Пажитновым в 1985 году. С тех пор, Тетрис доступен на почти каждой компьютерной платформе в множестве вариаций.

Тетрисом называется игра-головоломка с падающими блоками. В этой игре, мы имеет семь разных фигур, называемых как: S-фигура, Z-фигура, T-фигура, L-фигура, фигура-линия, фигура «Зеркальная L», и фигура-квадрат. Каждая из этих фигур формируется с помощью четырёх квадратиков. Фигуры падают вниз на доску. Цель игры Тетрис – перемещать и вращать фигуры так, чтобы их приземлилось как можно больше. Если мы сумеем сформировать ряд, ряд разрушается и мы получаем очки. Мы играем в Тетрис до тех пор, пока мы не достигнем верха.

PyQt5 – инструментарий, разработанный для создания приложений. Существуют другие библиотеки, которые нацелены на создание компьютерный игр. Несмотря на это, PyQt5 и другие библиотеки для приложений могут быть использованы для создания простых игр. Создание компьютерной игры – отличный способ повышения навыков программирования.

PyQt5 имеет богатый набор готовых виджетов. Тем не менее, нет инструментария, способного предоставить все виджеты, в которых программисты могут нуждаться для своих приложений. Библиотеки обычно предоставляют только самые распространенные виджеты, такие как кнопки, текстовые виджеты или ползунки. Если существует необходимость в более специализированных виджетах, мы должны создать их сами.

Собственные виджеты создаются путём использования инструментов рисования, предоставляемых библиотекой. Существует две основных возможности: программист может изменить или дополнить существующий виджет, или он может создать собственный виджет с нуля.

Система рисования PyQt5 может использовать в работе векторную графику, изображения и контур основанного на шрифте текста. Рисование необходимо в приложениях, когда мы хотим изменить или увеличить существующий виджет, или мы создаём пользовательский виджет с нуля. Чтобы сделать рисунок, мы используем API рисования, предоставленное инструментарием PyQt5.

Рисование делается в рамках метода paintEvent(). Код рисования размещается между методами begin() и end() объекта QPainter. Он исполняет низкоуровневое рисование на виджетах и других окрашиваемых элементах.

В этой части руководства по PyQt5, мы поговорим об операциях перетаскивания. В графических интерфейсах, Drag’n’drop – это действие (или поддержка для действия) клика на виртуальный объект и перетаскивания его в другое положение или в другой виртуальный объект. В общем, это может быть использовано, чтобы запускать множество видов действий, или создавать различные типы ассоциаций между двумя абстрактными объектами.

Drag’n’drop – это часть графического пользовательского интерфейса. Операции перетаскивания позволяют пользователям делать сложные вещи интуитивно.

Обычно, мы можем перетаскивать две вещи: данные или некие графические объекты. Если мы перетаскиваем изображение из одного приложения в другое, мы перетаскиваем двоичные данные. Если мы перетаскиваем таблицу в Firefox и перемещаем её в другое место, мы перетаскиваем графический компонент.

Здесь мы продолжим знакомство с виджетами PyQt5.

Мы обсудим QPixmap, QLineEdit, QSplitter и QComboBox.

QPixMap

QPixMap – это один из виджетов, использующихся для работы с изображениями. Он оптимизирован для показа изображений на экране. В примере нашего кода, мы будем использовать QPixMap, чтобы отобразить изображение в окне.

Виджеты – это основные строительные кирпичики приложения. PyQt5 имеет широкий диапазон различных виджетов, включая кнопки, чек-боксы, ползунки и списки. В этой части руководства, мы опишем несколько полезных виджетов: QCheckBox, ToggleButton, QSlider, QProgressBar и QCalendarWidget.

QCheckBox

QCheckBox – это виджет, который имеет два состояния: вкл. и выкл. Это квадратик с меткой. Как правило, чекбоксы используют, чтобы представить функции приложения, которые могут быть включены или выключены.

Диалоговые окна или диалоги являются незаменимой частью большинства современных графических приложений. Диалог определяется как беседа между двумя и более людьми. В компьютерном приложении, диалог – это окно, которое используется, чтобы «разговаривать» с приложением. Диалог используется для ввода данных, изменения данных, изменения настроек приложения, и т.д.

QInputDialog

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

В этой части руководства по программированию с PyQt5

мы изучим события и сигналы, встречающиеся в приложениях.

События

Все приложения с графическим интерфейсом являются событийно-ориентированными. События вызываются главным образом пользователем приложения. Однако, они могут быть вызваны другими средствами, к примеру подключением к Интернету, диспетчером окон или таймером. Когда мы вызываем метод exec_(), приложение входит в главный цикл. Главный цикл получает события и отправляет их объектам.

В событийной модели имеются три участника:

  • Источник события;
  • Объект события;
  • Цель события.

Источник события – это объект, состояние которого меняется. Он вызывает события. Объект события (событие) внедряет состояние, которое меняется в источнике события. Цель события – это объект, которому требуется уведомление. Объект источника события поручает задачу обработки события цели события.

Чтобы начать работу с событиями, PyQt5 имеет уникальный механизм сигналов и слотов. Сигналы и слоты используют для связи между объектами. Сигнал срабатывает, когда происходит конкретное событие. Слот может быть чем-то, вызываемым средствами Python. Слот вызывается, когда срабатывает его сигнал.

Существенная сторона в программировании графических приложений – управление макетом. Управление макетом – это способ, которым мы размещаем виджеты в окне приложения. Управление может быть выполнена двумя основными путями. Мы можем использовать абсолютное позиционирование или классы макета.

Абсолютное позиционирование

Программист указывает позицию и размер каждого виджета в пикселях. При использовании абсолютного позиционирования, мы должны понимать следующие ограничения:

  • Размер и позиция виджета не меняются, если мы меняем размер окна
  • Приложения могут выглядеть по-разному на разных платформах
  • Изменение шрифтов в нашем приложении может испортить макет
  • Если мы решаем изменить наш макет, мы должны полностью переделать его, что утомительно и время-затратно.

Следующий пример размещает виджеты в абсолютных координатах.

В этой части руководства PyQt5, мы будем создавать меню и панели инструментов. Меню – это группа команд, располагающаяся ниже строки заголовка программы. Панель инструментов содержит кнопки с несколькими распространенными командами в приложении.

Основное окно

Класс QMainWindow предоставляет главное окно приложения. Он позволяет создать классический каркас приложения со строкой состояния, панелями инструментов и меню.

Строка состояния

Строка состояния – это виджет, который используется для отображения сведений о состоянии.

Дата публикации: 2019-07-22

От автора: что такое PyQt? PyQt — это привязка Python с открытым исходным кодом для виджет-инструментария Qt, который также функционирует как кросс-платформенная среда разработки приложений. Qt — это популярная среда C ++ для написания приложений с помощью графического интерфейса для всех основных настольных, мобильных и встраиваемых платформ (поддерживает Linux, Windows, MacOS, Android, iOS, Raspberry Pi и многие другие).

PyQt разрабатывается и поддерживается Riverbank Computing, компанией, базирующейся в Англии, а Qt — финской фирмой The Qt Company.

В этом руководстве по PyQT мы рассмотрим:

Получите курс и узнайте, как создать программу для перевода текстов на Python

Как установить PyQt

Основные понятия и программы PyQt

Компоненты и виджеты

Функци PyQT

PyQt состоит из более чем шести сотен классов, охватывающих ряд функций, таких как:

Графические пользовательские интерфейсы

Базы данных SQL

Эти функции можно комбинировать для создания расширенных пользовательских интерфейсов, а также автономных приложений. Многие крупные компании из различных отраслей используют PyQt: LG, Mercedes, AMD, Panasonic, Harman и т. д.

Версии PyQt

PyQt доступен в двух редакциях: PyQt4 и PyQt5. PyQt4 предоставляет связующий код для привязки версий Qx 4.x и 5.x, в то время как PyQt5 обеспечивает привязку только для версий 5.x. В результате PyQt5 не имеет обратной совместимости с устаревшими модулями более ранней версии. В этом руководстве будет использоваться для демонстрации примеров PyQt5. Помимо этих двух версий, Riverbank Computing также предоставляет PyQt3D — привязки python для инфраструктуры Qt3D. Qt3D — это прикладная среда, используемая для создания систем моделирования в реальном времени с 2D / 3D рендерингом.

Как установить PyQt

Есть два способа установки PyQt.

Использование файлов Wheel

Сборка и установка из исходного кода

Qt (произносится «кьют») — сложная система, а база кода PyQt содержит скомпилированный код C ++ и Python. В результате по сравнению с другими библиотеками Python это сложный процесс для сборки и установки из исходного кода. Тем не менее, вы можете легко установить PyQt5 с помощью Wheel.

Установка с помощью Wheel

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

Итак, если у вас установлен Python 3.4 или более поздней версии, у вас уже есть pip. Однако, если вы используете более старую версию Python, вам нужно скачать и установить pip, прежде продолжать. Вы можете найти инструкции по установке по этой ссылке: https://pypi.org/project/pip/.

Чтобы установить PyQt5:

Шаг 1) Откройте командную строку или PowerShell на компьютере с Windows.

Шаг 2) Введите следующее:

Этот шаг загрузит пакет PyQt5 whl (около 50 МБ) и установит его в вашей системе.

Кроме того, вы также можете загрузить двоичный файл Windows для версии Python, установленной на вашем компьютере. После завершения перейдите к следующему разделу, чтобы написать свое первое приложение с помощью графического интерфейса.

Основные понятия и программы PyQt

Теперь, когда вы успешно установили PyQt5 на компьютер, вы готовы писать приложения на python с помощью графического интерфейса. Давайте начнем с простого приложения, которое будет отображать пустое окно на экране. Запустите Python IDLE и введите следующее:

Сохраните его как app.py (имя не имеет значения) и нажмите F5, чтобы запустить программу. Или просто дважды кликните на сохраненном файле, чтобы запустить приложение. Если вы все сделали правильно, откроется новое окно с заголовком Guru99, как показано ниже.

Здорово! Работает. Это не так много, но достаточно, чтобы понять основы. Теперь давайте рассмотрим подробно, что делает каждая из строк в программе.

Этот оператор импортирует все модули, необходимые для создания GUI, в текущее пространство имен. Модуль QtWidgets содержит все основные виджеты, которые вы будете использовать в этом руководстве.

Здесь вы создаете объект класса QApplication. Этот шаг необходим для PyQt5; каждое приложение пользовательского интерфейса должно создавать экземпляр QApplication в качестве своего рода точки входа в приложение. Если вы не создадите его, будут выданы ошибки.

sys.argv — это список параметров командной строки, которые вы можете передать приложению при запуске через оболочку или при автоматизации интерфейса.

В этом примере вы не передали аргументы QApplications. Следовательно, вы также можете заменить его приведенным ниже кодом и даже не импортировать модуль sys.

Далее мы создаем объект класса QWidget. QWidget является базовым классом всех объектов пользовательского интерфейса в Qt, и практически все, что вы видите в приложении, является виджетом. Это включает в себя диалоговые окна, тексты, кнопки, панели и так далее. Функция, которая позволяет проектировать сложные пользовательские интерфейсы, основывается на том, что виджеты могут быть вложенными, то есть вы можете иметь виджет внутри виджета, который находится внутри еще одного виджета. Вы увидите это в действии в следующем разделе.

Метод resize класса QWidget позволяет устанавливать размеры любого виджета. В этом случае вы изменили размер окна на 300 * 300 пикселей. Здесь вы должны помнить, что виджеты могут быть вложены вместе, внешний виджет (т. е. виджет без родителя) называется окном.

Метод setWindowTitle () позволяет передать строку в качестве аргумента, который установит заголовок окна переданной вами строке. В этом примере в строке заголовка будет отображаться Guru99.

show() просто отображает виджет на экране монитора.

Метод app.exec_() запускает цикл событий Qt / C ++. Как вы знаете, PyQt в основном написан на C ++ и использует механизм цикла событий для реализации параллельного выполнения. app.exec_() передает управление Qt, который выходит из приложения только тогда, когда пользователь закроет его графический интерфейс. Вот почему Ctrl + C не выполняет выход из приложения, как в других программах Python. Поскольку Qt контролирует приложение, события Python не обрабатываются, пока мы не настроим их внутри приложения. Также обратите внимание, что у метода exec есть подчеркивание в имени; это потому, что exec() уже является ключевым словом в python, а подчеркивание разрешает конфликт имен.

Заполнение окон

В предыдущем разделе мы рассмотрели, как в Qt создать базовый виджет. Теперь пришло время сделать несколько более сложных интерфейсов, с которыми пользователи могут по-настоящему взаимодействовать. Снова, запустите IDLE и напишите следующее.

Сохраните файл как appone.py или как угодно и нажмите F5, чтобы запустить программу. Если вы не допустили ошибок, IDLE откроет новое окно с текстом и кнопкой, как показано ниже.

Как только вы нажмете кнопку в первом окне, откроется новое окно сообщения с текстом, который вы написали. Теперь вы можете нажать кнопку Hide Details/Show Details, чтобы переключить видимость дополнительного текста.

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

Это импортирует еще несколько виджетов, которые вы использовали в этом примере, а именно QLabel, QPushButton и QMessageBox.

Здесь вы определили метод с именем dialog, который создает виджет окна сообщения и устанавливает некоторый текст для кнопок и других полей.

Метод dialog вызывается из основного блока программы, когда кнопка нажимается в определенном виджете (в данном случае, btn PushButton). Событие клика, запущенное этой кнопкой, вызывает выполнение этой функции. Такая функция называется в Qt слотом, вы узнаете больше о сигналах и слотах в следующих разделах.

Это основной раздел приложения, и, как и в предыдущем примере, вы начинаете с создания экземпляра QApplication, за которым следует простой виджет, это экземпляр QWidget.

Мы добавили два новых виджета в это приложение: QLabel и QPushButton. QLabel используется для вывода нередактируемого текста или заполнителей внутри виджета, тогда как QPushButton используется для создания кликабельной кнопки.

Здесь важно заметить, что при создании объектов label и btn вы передаете объект окна (w) конструкторам QLabel и QPushButton. Вот как работает вложение в PyQt5. Чтобы создать виджет внутри другого виджета, вы передаете ссылку на родительский виджет в конструктор дочернего элемента.

move() используется для установки позиции виджета относительно его родительского виджета. В первом случае метка будет перемещена на 100 пикселей с левой стороны и на 130 пикселей сверху окна.

Точно так же кнопка будет размещена на 110 пикселей слева и на 150 пикселей сверху окна. Этот пример является грубым способом создания макетов и обычно не используется в производстве; он включен только для учебных целей. Qt поддерживает различные макеты, которые мы детально рассмотрим в следующих разделах этого руководства.

Наконец, это пример сигналов и слотов в Qt. В приложениях на основе графического интерфейса функции выполняются на основе действий, запускаемых пользователем, таких как наведение на элемент или нажатие кнопки. Эти действия называются событиями. Напомним, что метод app.exec_() передает управление в цикл обработки событий Qt. Для этого и предназначен цикл событий: прослушивать события и выполнять в ответ действия.

Каждый раз, когда происходит событие, например, когда пользователь нажимает кнопку, соответствующий виджет Qt генерирует сигнал. Эти сигналы могут быть подключены к функциям Python (например, к функции диалога в этом примере), чтобы функция выполнялась при срабатывании сигнала. Эти функции в Qt lingo называются слотами. Основной синтаксис для запуска функции слота в ответ на сигнал от события выглядит следующим образом:

Это означает, что всякий раз, когда сигнал запускается виджетом , будет выполняться функция подключенного слота. Таким образом, Qt использует сигналы и слоты для связи между объектами и облегчения повторного использования и интерактивности компонентов.

Теперь, когда вы знаете, как вкладывать виджеты и реализовывать взаимодействия с помощью сигналов и слотов, вот список полезных виджетов и других классов, которые вы можете использовать в приложениях PyQt.

Компоненты и виджеты

В PyQt доступно большое количество виджетов для создания приложений с помощью графического интерфейса. Однако в PyQt5 была произведены реорганизация классов в другие модули и ревизии в лицензиях.

Поэтому очень важно иметь общее представление о структуре PyQt5. В этом разделе мы рассмотрим, как PyQt5 организован внутри, и вы узнаете о различных модулях, библиотеках и классах API, предоставляемых PyQt5.

Структура каталогов PyQt5

Получите курс и узнайте, как создать программу для перевода текстов на Python

Это фундаментальные модули, используемые связыванием Qt в Python, в частности в PyQt5.

Qt: Он объединяет все классы / модули, упомянутые ниже, в один модуль. Это значительно увеличивает объем памяти, используемой приложением. Однако управлять инфраструктурой проще, импортируя только один модуль.

QtCore: Содержит основные неграфические классы, используемые другими модулями. Именно здесь реализуются цикл событий Qt, сигналы, возможность подключения к слотам и т. д.

QtWidgets: Содержит большинство виджетов, доступных в Pyqt5.

QtGui: Содержит компоненты графического интерфейса и расширяет модуль QtCore.

QtNetwork: Содержит классы, используемые для реализации сетевого программирования через Qt. Он поддерживает TCP-серверы, TCP-сокеты, UDP-сокеты, обработку SSL, сетевых сеансов и поиск DNS.

QtMultimedia: Предоставляет низкоуровневый мультимедийный функционал.

QtSql: реализует интеграцию базы данных для баз данных SQL. Поддерживает ODBC, MySQL, Oracle, SQLite и PostgreSQL.

Виджеты PyQt5

Вот список наиболее часто используемых виджетов PyQt5:

QLineEdit: Это поле ввода, которое позволяет пользователю вводить одну строку текста.

QRadioButton: Это поле ввода с выбираемой кнопкой, аналогичное переключателям в html.

QComboBox: Используется для отображения выпадающего меню со списком выбираемых элементов.

QCheckBox: Отображает выбираемое квадратное поле перед меткой, которая отмечена, если выбрана, аналогично переключателям.

QMenuBar: Отображает горизонтальную строку меню в верхней части окна. Вы можете добавить в эту панель только объекты класса QMenu. Эти объекты QMenu могут дополнительно содержать строки, объекты QAction или другие объекты QMenu.

QToolBar: Это горизонтальная панель или панель, которую можно перемещать в пределах окна. Может содержать кнопки и другие виджеты.

QTab: Используется для разбиения содержимого окна на несколько страниц, к которым можно получить доступ через разные вкладки в верхней части виджета. Он состоит из двух разделов: панель вкладок и страница вкладок.

QScrollBar: Используется для создания полос прокрутки, которые позволяют пользователю прокручивать вверх и вниз в пределах окна. Он состоит из подвижного ползунка, дорожки ползунка и двух кнопок для прокрутки ползунка вверх или вниз.

QSplitter: Разделители используются для разделения содержимого окна, чтобы виджеты были сгруппированы правильно и не выглядели нагроможденными. QSplitter является одним из основных обработчиков макетов, доступных в PyQt5, и используется для разделения содержимого как по горизонтали, так и по вертикали.

QDock: виджет-док — это подокно с двумя свойствами: оно может быть перемещено в главное окно и его можно закрепить за пределами родительского окна в другом месте на экране.

Макеты и темы

В предыдущих примерах мы использовали только методы move() и resize() для установки позиций виджетов в графическом интерфейсе.

Тем не менее, PyQt имеет мощный механизм управления компоновкой, который можно использовать для создания расширенных пользовательских интерфейсов приложений. В этом разделе вы узнаете о двух важных классах, которые используются в Qt для создания и управления макетами: QBoxLayout и QGridLayout.

QBoxLayout

QBoxLayout используется для выравнивания дочерних виджетов макета в горизонтальной или вертикальной строке. Два основных класса, которые наследуются от QBoxLayout, это:

QHBoxLayout: используется для выравнивания дочерних виджетов по горизонтали.

QVBoxLayout: используется для выравнивания дочерних виджетов по вертикали.

Например, так будут выглядеть три кнопки, выровненные по QHBoxLayout.

А вот как они будут выглядеть в QVBoxLayout.

Единственная функция, которая нуждается в каком-либо объяснении на данный момент, это метод addWidget(). Он используется для вставки виджетов в макет HBox или VBox. Он также используется в других макетах, где принимает другое количество параметров, как вы увидите в следующем разделе. Виджеты отображаются внутри макета в том порядке, в котором вы их вставляете.

QGridLayout

QGridLayout используется для создания интерфейсов, в которых виджеты расположены в виде сетки (например, матрицы или 2D-массива). Чтобы вставить элементы в сетку, вы можете использовать матричное представление, чтобы определить количество строк и столбцов в сетке, а также положение этих элементов.

Например, чтобы создать сетку 3 * 3 (т.е. сетку с тремя строками и тремя столбцами), вы пишите следующий код:

Вывод будет следующий:

Метод addWidget() в макете сетки принимает следующие аргументы:

Объект виджета, который вы хотите добавить в сетку

Диапазон строк (по умолчанию = 0)

Col-span (по умолчанию = 0)

Чтобы лучше это понять, вы можете вручную вставить каждый виджет, как показано ниже:

Вот как будет выглядеть сетка:

Вы также можете передать параметры rowspan и colspan в addWidget(), чтобы охватить более одной строки или столбца.

Это создаст кнопку, которая растягивается на оба столбца.

PyQt5 поставляется с некоторыми встроенными темами, которые вы можете использовать в приложениях. Метод setStyle(), вызываемый в экземпляре QApplication, используется для установки определенной темы для вашего приложения. Например, добавление следующей строки кода изменит тему приложения по умолчанию на Fusion:

Так будет выглядеть предыдущий пример в теме Fusion.

Еще одна полезная функция для создания тем приложений — это метод setPalette(). Вот код для изменения цвета различных виджетов с помощью setPalette().

Чтобы использовать метод setPalette(), сначала нужно определить палитру. Это делается путем создания объекта класса QPalette.

Обратите внимание, что класс QPalette принадлежит модулю QtGui, и вам нужно будет импортировать его, чтобы это работало. Создав объект QPalette, используйте метод setColor(), чтобы передать имя виджета, цвет которого вы хотите изменить, и цвет, который вы хотите установить.

Это изменит цвет окна на черный. После того, как вы определили цветовую схему, используйте функцию setPalette(), чтобы применить палитру к приложению.

Это все, что вам нужно сделать, если вы хотите создать базовые темы для своего приложения. PyQt также позволяет использовать таблицы стилей для определения внешнего вида виджетов. Если вы знакомы с CSS, вы можете легко определить расширенные стили для приложения, используя таблицы стилей Qt.

Заключение

PyQt — это привязка Python для инфраструктуры пользовательского интерфейса C ++, Qt.

PyQt4 и PyQt5 — две основные версии, разработанные Riverbank Computing.

Основными модулями платформы PyQt являются: Qt, QtCore, QtWidgets, QtGui, QtSql, QtNetwork

PyQt поддерживает различные виджеты, такие как: Кнопки, Текстовые метки, Текстовые поля, Переключатели и чек-боксы, Панели инструментов и строки меню, Webkit, Вкладки, Доки

В PyQt интерактивность реализована с использованием сигналов и слотов.

Событие это действие, которое выполняется пользователем в графическом интерфейсе (например, нажатие кнопки).

Сигнал передается в соответствующий виджет, когда в нем происходит событие.

Слот является функцией, которая подключается к сигналу и выполняет при повышении сигнала.

PyQt имеет надежный механизм компоновки и поддерживает расширенный дизайн макета и управление им. Это две часто используемые схемы компоновки в PyQt: Макет блока, Макет сетки

PyQt позволяет создавать собственные темы для приложения с графическим интерфейсом и имеет встроенную поддержку таблиц стилей.

PyQt может использоваться для создания пользовательских интерфейсов, а также автономных приложений.

Редакция: Команда webformyself.

Получите курс и узнайте, как создать программу для перевода текстов на Python

Документация по

Qt | Модули

Qt Essentials

Qt Essentials определяет основу Qt на всех платформах. Они доступны на все поддерживаемые платформы разработки и на протестированных целевых платформах. За исключением модули тестирования, которые останутся совместимыми с исходным кодом, эти модули останутся исходный код и двоичный код совместимы на протяжении всего жизненного цикла основной версии Qt.

  • Qt Core

    Основные неграфические классы, используемые другими модулями.

  • Qt D-Bus

    Классы для межпроцессного взаимодействия по протоколу D-Bus.

  • Qt GUI

    Базовые классы для графических пользовательских интерфейсов.

  • Сеть Qt

    Классы для упрощения и портативности сетевого программирования

  • Qt QML

    Классы для языков QML и JavaScript.

  • Qt Quick

    Декларативная структура для создания динамических приложений с настраиваемыми пользовательскими интерфейсами.

  • Элементы быстрого управления Qt

    Облегченные типы QML для создания эффективных пользовательских интерфейсов для настольных, встроенных и мобильных устройств.

  • Qt Quick Layouts

    Макеты для размещения элементов Qt Quick в пользовательском интерфейсе.

  • Qt Quick Test

    Среда модульного тестирования для приложений QML, где тестовые примеры написаны как функции JavaScript.

  • Qt-тест

    Классы для модульного тестирования приложений и библиотек Qt.

  • Виджеты Qt

    Классы для расширения графического интерфейса Qt с помощью виджетов C ++.

Дополнения Qt

Дополнительные модули приносят дополнительную пользу для определенных целей.Эти модули могут только быть доступным на некоторых платформах разработки.

  • API совместимости ядер Qt 5

    Qt Core API, которые были в Qt 5, но не в Qt 6.

  • Qt одновременно

    Классы для написания многопоточных программ без использования низкоуровневых потоковых примитивов.

  • Справка по Qt

    Классы для интеграции документации в приложения.

  • Qt OpenGL

    классов C ++, которые упрощают использование OpenGL в приложениях Qt.

  • Поддержка печати Qt

    Классы для упрощения и портативности печати.

  • Qt Quick 3D

    Предоставляет высокоуровневый API для создания трехмерного содержимого или пользовательского интерфейса на основе Qt Quick.

  • Qt Quick Timeline

    Включает анимацию и параметризацию на основе ключевых кадров.

  • Быстрые виджеты Qt

    Предоставляет класс виджета C ++ для отображения пользовательского интерфейса Qt Quick.

  • Инструменты для шейдеров Qt

    Инструменты для кроссплатформенного конвейера шейдеров Qt, позволяющие использовать графику и вычислять шейдеры в Qt Quick и других компонентах экосистемы Qt.

  • Qt SQL

    Классы для интеграции баз данных с использованием SQL.

  • Qt SVG

    Классы для отображения содержимого файлов SVG. Поддерживает подмножество стандарта SVG 1.2 Tiny.

  • Инструменты пользовательского интерфейса Qt

    Классы для загрузки форм на основе QWidget, созданных в Qt Designer динамически, во время выполнения.

  • Qt XML

    Предоставляет реализации стандартов SAX и DOM для XML.

  • Композитор Qt Wayland

    Предоставляет основу для разработки композитора Wayland.

Дополнительные библиотеки Qt

Дополнительные библиотеки доступны либо через онлайн-установщик, либо Qt Marketplace.

  • Qt 3D

    Функциональность для систем моделирования почти в реальном времени с поддержкой 2D и 3D рендеринга.

  • Форматы изображений Qt

    Плагины для дополнительных форматов изображений: TIFF, MNG, TGA, WBMP.

  • Сетевая авторизация Qt

    Обеспечивает поддержку авторизации на основе OAuth для онлайн-сервисов.

  • Qt Quick TreeView

    Предоставляет элемент управления, который можно использовать для отображения модели дерева в Qt Quick.

  • Qt Быстрый календарь

    Предоставляет набор типов, которые можно использовать для построения календарей в Qt Quick.

  • Qt Quick MultiEffect

    Предоставляет компонент Qt Quick для быстрых анимированных эффектов.

5 квартал

Документация для выпусков Qt 5.

  • Qt 5.15

    Версия с долгосрочной поддержкой.

  • Qt 5.12

    Версия с долгосрочной поддержкой.

Qt для Python

Связывание Python для Qt.

  • Qt для Python 6.1

    Официальные привязки Python для Qt 6.

  • Qt для Python 5.15

    Официальные привязки Python для Qt 5.

Обзор документации

  • Рамка

  • Начать

  • Инструменты

  • встроенный

GitHub — qt / qtdoc: Документация Qt

GitHub — qt / qtdoc: Документация Qt

Файлы

Постоянная ссылка Не удалось загрузить последнюю информацию о фиксации.

Тип

Имя

Последнее сообщение фиксации

Время фиксации

 Для создания документации Qt:

qtdoc содержит основную справочную документацию Qt, которая включает
обзоры, разделы Qt и примеры, не относящиеся к какому-либо модулю Qt.В
файлы конфигурации находятся в qtdoc / doc / config, а статьи в
qtdoc / doc / src. Обратите внимание, что QDoc находится в qttools / src / qdoc.

Инструкции в этом файле предполагают, что необходимые двоичные файлы
скомпилирован и в переменной $ PATH.

Предпосылки:
    * qtbase существует
    * "qmake" и "qdoc" скомпилированы и установлены
    * другие репозитории Qt существуют по мере необходимости

Справочная документация Qt была написана со ссылками на выпущенные модули.
для Qt 5. Если модули и репозитории не существуют, то полученный HTML
файлы будут содержать неработающие ссылки.Есть два способа создания документации. Один из способов - скомпилировать
документация с использованием QDoc и файла конфигурации (qdocconf). Другой
способ - использовать qmake, запустив "make docs".

Раздел 1 Создание файла qdocconf

    Этот метод полезен для создания отдельных проектов без каких-либо
    зависимости от других проектов.

    Для сборки с использованием файла qdocconf запустите двоичный файл «qdoc» и передайте
    qdocconf в качестве параметра. "qdoc" находится в репозитории qttools. А
    обязательно должен быть указан outputdir.$> qdoc doc / config / qtdoc.qdocconf -outputdir html

    Обратите внимание, что QDoc удалит содержимое выходного каталога "html".

Раздел 2 Сборка с использованием make

    QMake использует переменную QT_INSTALL_DOCS, чтобы определить, где находится документация.
    для Qt 5 установлены. Этот метод полезен для связывания с другими Qt
    модули.

    Чтобы увидеть, где будет установлена ​​документация, запустите:
    $> qmake -query

    Чтобы создать документацию, запустите:

    $> cd qtdoc # или корень любого репозитория
    $> qmake
    $> сделать документы

    "make docs" также работает в основном репозитории Qt 5.Запуск команды
    там будет сгенерирована документация для Qt 5 и установлена ​​в
    путь установлен в переменную QT_INSTALL_DOCS.

Раздел 3 Сборка Qt-документации

    Чтобы собрать документацию по модулю Qt вместе со Справочной документацией Qt,
    выполните следующее:

    $> cd qt5 # основной каталог qt5.git
    $> make qmake_all # создает файлы Makefile для каждого репозитория
    $> сделать документы

    Чтобы сгенерировать только файлы HTML, запустите make html_docs вместо make docs.

Раздел 4 Упаковка документации

    Необходимые двоичные файлы:
    * qhelpgenerator - находится в qttools

    Чтобы скомпилировать файл thq qch для каждого модуля, сначала войдите в выходной каталог
    который содержит.qhp и сгенерируйте файл QCH.

    $> cd qtbase / doc / qtdoc # путь по умолчанию для QT_INSTALL_DOCS для qtdoc
    $> qhelpgenerator qtdoc.qhp # создает файл QCH с именем qtdoc.qch

    В качестве альтернативы модули имеют цель "qch_docs":
    $> cd qtbase
    $> make qch_docs # создает файлы QCH для модулей в qtbase

    Затем файл QCH можно загрузить в Qt Creator.

Раздел 5 Дополнительная информация

Для получения дополнительной информации о документации Qt 5 обратитесь к вики проекта Qt:
http: // вики.qt.io/Qt5DocumentationProject
 

Около

Документация Qt

Ресурсы

Лицензия

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

Выбор динамического языка в Qt | ICS

В этом сообщении блога мы покажем пример поддержки динамического выбора языка в приложении, использующем Qt. Под «динамическим» я подразумеваю, что приложение может изменять отображаемый язык изнутри приложения во время выполнения, а не выбирать его из локали один раз при запуске.

Текстовый перевод или перевод на основе идентификатора?

В этом примере мы будем использовать механизм трансляции текстового идентификатора, который может быть вам незнаком, если вы использовали только более распространенный в Qt метод перевода на основе строк с использованием метода tr () .

Метод на основе ID (1) описан в документации Qt как «промышленная сила» для интернационализации и локализации. Эта система предлагает ряд преимуществ, особенно в больших приложениях. Например, некоторые приложения могут уже иметь переводы, поддерживаемые в базе данных, электронной таблице или другой системе на основе идентификатора, которую легче поддерживать в Qt, используя подход на основе идентификатора.

Для небольших приложений и приложений, разрабатываемых с нуля, более подходящая система на основе строк может быть более подходящей.

Основы

Основные шаги для реализации этой схемы локализации следующие:

1. Определите текстовые строки во всех элементах управления графического интерфейса пользователя (заголовки окон, пункты меню, всплывающие подсказки, метки для кнопок, флажки и переключатели и т. Д.) И определите соответствующий уникальный идентификатор для каждого текстового элемента. Учитывая это, мы можем создать два файла. В нашем примере мы называем их translation.h и translation.cpp . Первый содержит объявления для глобальных идентификаторов, например:

extern const char * ID_LABEL_TEXT;

Второй файл содержит определения этих идентификаторов, которые будут использоваться позже при переводе (*.ts) файлы, например

const char * ID_LABEL_TEXT = QT_TRID_NOOP («id_label_text»);

Для обеспечения динамической трансляции мы используем макрос QT_TRID_NOOP вместе с функцией qtTrId () . В другом месте исходного кода нашего приложения мы должны использовать функцию qtTrId () для фактических переводов. Например:

QLabel * label = новый Qlabel (qtTrId (ID_LABEL_TEXT));

или

метка-> setText (qtTrId (ID_LABEL_TEXT));

2.Создайте файлы перевода.

Файл перевода Qt — это просто файл XML. Qt предоставляет утилиту lupdate, которая используется для создания файлов перевода. Инструмент собирает все идентифицированные строки в группу файлов XML (по одному для каждого языка), названных с расширением файла ts.

Как правило, все файлы ts хранятся в каталоге с подходящим именем, например i18n. Мы можем запустить утилиту lupdate , чтобы извлечь информацию о строковом идентификаторе и сгенерировать файлы перевода.В нашем примере приложения мы поддерживаем три разных языка и можем создавать файлы с помощью этих команд (которые следует запускать из каталога i18n):

lupdate ../translation.cpp -ts lang_en_US.ts
lupdate ../translation.cpp -ts lang_ru_RU.ts
lupdate ../translation.cpp -ts lang_fr_FR.ts

В отличие от подхода на основе строк, сгенерированные файлы ts не содержат текст, который нужно перевести, а вместо этого содержат уникальные идентификаторы для каждой строки.Вот часть одного из файлов:





Теперь нам нужно заполнить переводы, используя XML или текстовый редактор, или, желательно, используя графический инструмент Qt Linguist.

3. Запустите приложение Qt Linguist.

Человек-переводчик должен добавить соответствующие переводы для каждой строки в ts-файл.Затем нам нужно запустить команду lrelease для каждого файла ts, например

* .ts

на основе lrelease

Приведенная выше команда генерирует облегченные двоичные (qm) файлы, связанные с определенным файлом ts. Эти файлы используются объектом QTranslator, который предоставляет функции для поиска переводов в файле qm. Обратите внимание, что нам нужно использовать опцию на основе для lrelease при использовании схемы трансляции на основе идентификатора.

Пример приложения

Демонстрационное приложение (2) демонстрирует, как использовать преобразование на основе идентификатора.Он охватывает два различных способа, обычно используемых для создания графического интерфейса с помощью Qt: использование Qt Designer с формой пользовательского интерфейса (в данном случае класс MainWindow) и рукописный код C ++ (в данном случае класс Dialog).

Пример поддерживает три разных языка: английский, французский и русский и содержит настраиваемый класс: TranslatorManager. Класс TranslatorManager реализован как синглтон и используется как контейнер для классов QTranslator. Он создает класс QTranslator для каждого поддерживаемого языка и позволяет устанавливать или изменять язык для приложения.

Следует отметить, что если вы динамически изменяете язык в своем приложении, генерируется событие изменения типа QEvent :: LanguageChange . Вам нужно будет поймать это событие и сбросить текст везде в вашем приложении.

Пример приложения будет компилироваться с использованием Qt версии 4 или 5. В нем используются некоторые возможности языка C ++ 11, поэтому вам понадобится достаточно последняя версия компилятора C ++.

Некоторые снимки экрана показаны ниже:

Сводка

В этом сообщении в блоге представлен пример динамического выбора языка с использованием метода локализации на основе идентификатора Qt.Хотя пример был на C ++ и использовал виджеты, следует отметить, что та же схема поддерживается в QML с использованием функции qsTrId () , поэтому она применима и к приложениям Qt Quick.

Список литературы

  1. Qt Linguist Manual: Text ID Based Translations, веб-сайт документации Qt, последний доступ 22 мая 2015 г., http://doc.qt.io/qt-5/linguist-id-based-i18n.html
  2. Исходный код для примера приложения ftp://ftp.ics.com/pub/pickup/MultiLanguageApp.застежка-молния

c ++ — Как использовать маску QLineEdit с русскими буквами?

Вы можете просто применить принцип «toLower», хотя и не для QString , поскольку он всегда обрабатывается с локалью «C», а для QLocale согласно документации Qt:

QString QLocale :: toLower (const QString & str) const

Возвращает строчную копию str. Эта функция была введена в QtCore 4.8.

Вы можете использовать QValidator для QLineEdit , если хотите (на основе вашего «первоначального запроса»):

void QValidator :: setLocale (const QLocale & locale)

Устанавливает языковой стандарт, который будет использоваться для валидатора.Если не был вызван setLocale, валидатор будет использовать языковой стандарт по умолчанию, установленный с помощью QLocale :: setDefault (). Если языковой стандарт по умолчанию не был установлен, это языковой стандарт операционной системы.

и:

State QValidator :: validate (QString & input, int & pos) const [чисто виртуальный]

Эта виртуальная функция возвращает Invalid, если ввод недопустим в соответствии с правилами этого валидатора, Intermediate, если вероятно, что небольшое дополнительное редактирование сделает ввод приемлемым (например,грамм. пользователь вводит «4» в виджет, который принимает целые числа от 10 до 99), и «Допустимо», если ввод действителен. При необходимости функция может изменять как input, так и pos (положение курсора).

Если у вас есть собственная реализация валидатора, вы можете использовать следующий установщик QLineEdit , чтобы фактически использовать вашу валидацию:

void QLineEdit :: setValidator (const QValidator * v)

Устанавливает при редактировании этой строки только ввод, который примет валидатор v.Это позволяет накладывать произвольные ограничения на вводимый текст. Если v == 0, setValidator () удаляет текущий валидатор ввода. Первоначальная настройка — отсутствие валидатора ввода (т. Е. Любой ввод принимается до maxLength ()).

Виртуальная клавиатура

Qt | Документация Qt (Pro)

Проект Qt Virtual Keyboard предоставляет среду ввода и интерфейс эталонной клавиатуры для Qt 5 на рабочем столе Linux / X11, рабочем столе Windows и Boot2Qt. цели.

Платформа ввода позволяет легко писать собственные методы ввода или интегрировать сторонние механизмы ввода. Методы ввода могут быть реализованы на C ++ или QML.

Характеристики

Ключевые особенности виртуальной клавиатуры Qt:

  • Настраиваемые раскладки клавиатуры и стили с динамическим переключением.
  • Интеллектуальный ввод текста с выбором слов.
  • Предварительный просмотр персонажа и альтернативный просмотр персонажа.
  • Автоматический ввод заглавных букв и пробелов.
  • Возможность масштабирования до различных разрешений.
  • Поддержка различных наборов символов (латинский, упрощенный / традиционный китайский, хинди, японский, арабский, иврит, корейский и другие).
  • Поддержка наиболее распространенных языков ввода с возможностью простого расширения языковой поддержки.
  • Ввод слева направо и справа налево.
  • Поддержка аппаратных клавиш для двух- и пятисторонней навигации.
  • Поддержка рукописного ввода с жестами для полноэкранного ввода.
  • Звуковая обратная связь.
  • Кросс-платформенная функциональность.
  • Поддерживает приложения Qt Quick и Qt Widgets.

Поддерживаемые языки

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

Чтобы добавить поддержку дополнительного языка, см. Добавление новых раскладок клавиатуры.

Руководства

Ссылка API

Примеры

Лицензии и авторство

Виртуальная клавиатура

Qt доступна по коммерческим лицензиям от компании Qt. Кроме того, он доступен под лицензией GNU General Общественная лицензия, версия 3. Для получения дополнительной информации см. Лицензирование Qt.

Кроме того, виртуальная клавиатура Qt потенциально содержит сторонние модули под следующими разрешительными лицензиями:

AreaSeries QML Тип | Графики Qt

Представляет данные в виде диаграмм с областями.Подробнее …

Недвижимость

Сигналы

Подробное описание

Ряд площадей используется для отображения количественных данных. Он основан на серии линий таким образом, что область между граничными линиями выделяется цветом. Тип LineSeries определяет верхнюю границу области. Диаграмма с областями рисуется с использованием нижней части области графика как нижней границы по умолчанию.Вместо нижней части области графика нижняя граница может быть указана как другая линия. В этом случае AreaSeries должна использовать два типа LineSeries.

Примечание: Термины верхняя и нижняя граница могут вводить в заблуждение в случаях, когда значение нижней границы больше, чем значение верхней границы. Главное, что область между этими двумя граничные линии будут заполнены.

В следующем QML показано, как создать простую диаграмму с областями:

 ChartView {
    title: "Игроки команды всех звезд НХЛ"
    якоря.fill: parent
    сглаживание: правда

    
    ValueAxis {
        id: valueAxis
        мин: 2000
        макс: 2011
        tickCount: 12
        labelFormat: "% .0f"
    }

    AreaSeries {
        название: «Русский»
        axisX: valueAxis
        upperSeries: LineSeries {
            XYPoint {x: 2000; y: 1}
            XYPoint {x: 2001; y: 1}
            XYPoint {x: 2002; y: 1}
            XYPoint {x: 2003; y: 1}
            XYPoint {x: 2004; y: 1}
            XYPoint {x: 2005; y: 0}
            XYPoint {x: 2006; y: 1}
            XYPoint {x: 2007; y: 1}
            XYPoint {x: 2008; y: 4}
            XYPoint {x: 2009; y: 3}
            XYPoint {x: 2010; y: 2}
            XYPoint {x: 2011; y: 1}
        }
    } 

Примечание: Добавление одного и того же ряда линий в диаграмму и ряд областей не поддерживается.Серии, используемые в качестве граничных линий, следует определять только для серий площадей.

Имущественная документация

Угловая ось, используемая для ряда, проведенного вокруг полярной карты.

См. Также axisX и PolarChartView.


Радиальная ось, используемая для ряда, нарисованная внутри полярной карты.

См. Также axisY и PolarChartView.


Ось X, используемая для серии. Если вы оставите значения axisX и axisXTop неопределенными, для ряда будет создана ось значений.

См. Также axisXTop и ValueAxis.


Ось X, используемая для ряда, нанесенного поверх представления диаграммы.

Примечание: Можно указать только axisX или axisXTop, но не оба сразу.

См. Также axisX.


Ось Y, используемая для серии. Если оставить значения axisY и axisYRight неопределенными, для ряда будет создана ось значений.

См. Также axisYRight и ValueAxis.


Ось Y, используемая для ряда, проведенная справа в представлении диаграммы.

Примечание: Можно указать только axisY или axisYRight, но не оба сразу.

См. Также axisY.


Линия (перо) цвет серии.


Ширина границы. По умолчанию ширина составляет 2,0.


Имя файла, используемого в качестве изображения кисти для серии.


Цвет заливки (кисти) серии.


Нижний из двух рядов линий, используемых для определения границ ряда областей.

Примечание: Если AreaSeries была создана без lowerSeries, это значение null.


pointLabelsClipping: bool

Определяет отсечение меток точек данных.Верно по умолчанию. Метки на краю области печати обрезаются, если включена обрезка.

См. Также pointLabelsVisible.


Определяет цвет, используемый для меток точек данных. По умолчанию это цвет кисти, определенный для меток в теме.

См. Также pointLabelsFormat.




pointLabelsVisible: bool


Верхний из двух рядов линий, используемых для определения границ ряда областей.


Сигнальная документация

Этот сигнал излучается, когда пользователь нажимает на точку точки , щелкая ее на диаграмме с областями.

Соответствующий обработчик сигнала — onClicked .

См. Также нажатие, отпускание и двойное нажатие.


doubleClicked (точка точка )

Этот сигнал излучается, когда пользователь запускает первое нажатие на диаграмме с областями двойным щелчком по по точке .

Соответствующий обработчик сигнала — onDoubleClicked .

См. Также нажатие, отпускание и щелчок.


Этот сигнал излучается, когда пользователь наводит курсор мыши на серию или отодвигает ее от серии. Точка показывает начало (координату) события наведения. состояние истина , когда курсор зависает над серией и превращает в ложь , когда удаляется из серии.

Соответствующий обработчик сигнала — onHovered .


Этот сигнал излучается, когда пользователь нажимает точку, указанную точкой на диаграмме с областями.

Соответствующий обработчик сигнала — onPressed .

См. Также нажатие, отпускание и двойное нажатие.


Этот сигнал излучается, когда пользователь отпускает нажатие, которое было запущено на точке на диаграмме с областями.

Соответствующий обработчик сигнала — onReleased .

См. Также нажатие, нажатие и двойное нажатие.


Киньте пару хороших книжек по Qt (C ++) — C ++

1. Бланшетт, SUMMERFIELD — Qt4 GUI Программирование на C ++. 2ед. — 2008
2. Бридж Макс — профессиональное программирование на C ++. + CD. Qt 4.8. (В оригинале) — 2012
3. Марк САММЕРФИЛД — Профессиональное программирование на Qt (High tech) — 2011
4.Андрей Боровский — Qt4.7 +. Практическое программирование на C ++ — 2012
5. Юрий Земсков — Примеры Qt4

В первой книге от создателей Qt, в первых главах рассмотрено создание приложений для работы с таблицами (этакий мини-Excel). Так что буквально за один день разобраться во всех тонкостях создания подобных приложений.
Вторая книга от сообщества программистов Qt, очень подробный и толстый справочник по виджетам, их описанию и примерам использования.По JavaScript / QML / QtQuick есть несколько глав. Определенное должно быть.
Третья книга от одного из программистов, разрабатывающих Qt. В нем рассказывается о профессиональной разработке приложений. Что-то является продолжением первой книги.
Четвертая книга от отечественного программиста рассматривает в основном принципы разработки сложных приложений.

Оставить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *