Как сделать список pyqt

Обновлено: 02.07.2024

[adace-ad >Ранее мы уже познакомились с библиотекой PyQt и рассмотрели несколько простых примеров разработки приложений. Так же мы упомянули, что на Python написать код можно двумя способами: с помощью утилиты QtDesigner или вручную. Если вы выбрали второй вариант, то сегодня мы продолжим напишем простой пример интерфейса с PyQT с обработчиками и событиями. В прошлый раз мы пробовали написать небольшое окно с тулбаром

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

Интерфейс — это связь между программой и пользователем. Главное, что нужно знать при разработке на PyQT — это такие определения как сигналы и слоты. Сигнал — это какое-либо событие, которые вы сделали в интерфейсе: нажали на кнопку мыши, выбрали какой-то элемент из выпадающего списка, изменили что-то или удалили. Создать сигнал можно при помощи ключевого слова emit().

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

Какие бывают сигналы?

Что может служить слотом?

  • Функция
  • Метод класса
  • Объект с методом вызова (__call__)
  • Анонимная функция (lambda-функция)
  • Слот класса (декоратор pyqtSignal — о нем ниже)

Пример:

Наша задача — создать объект и связать его с сигналом и реализовать обработчик этого самого сигнала. В теории это выглядит так

  1. Кнопка (список, элемент интерфейса). В общем, объект.
  2. Далее идёт событие (нажатие, клик).
  3. При наступлении п.2 (события) срабатывает сигнал
  4. Когда срабатывает п.3 (сигнал) вызывается обработчик

Сигнал может быть и встроенный, но мы напишем свой. Итак, у нас есть MainWindow — главное окно программы. Он наследуется от класса QMainWindow — встроенного класса, который импортируется из QWidget . Так же у нас есть класс для объектов — AnyObjects , который в свою очередь наследуется от QObject . Внутри него pyqtSignal() — это конструктор, который позволяет создать собственный сигнал

В MainWindow не забываем прописывать метод super().__init__() . Как мы помним это позволяет работать с атрибутами класса родителя. Обратите внимание на функцию set_params , вызываемой внутри класса. В ней мы и прописываем наш сигнал в виде объекта — self.ao = AnyObjects()

Результат при запуске:



Создание слайдера и прогресс-бара

[adace-ad >Несмотря на то, что программисты во многом считаются адептом машинного кода, некоторые элементы интерфейса можно сделать через QtDesigner. Таковыми являются слайдер (ползунок, который меняет какой-либо параметр) и прогресс бар (заполняющаяся линейка при ожидании завершении процесса). Их можно сделать в качестве отдельных модулей и импортировать в главный скрипт

Файлы имеют расширение UI (UserInterface) и являются обычным XML-кодом. Их можно программно перевести в py-файлы — мы их не создаем вручную


Данный интерфейс сохраняется в файл с расширением .ui. Как выглядит файл .ui, если его открыть в текстовом редакторе:


Таким образом, можно создавать простенькие элементы интерфейса, а затем релизить их в py-модули с помощью PyQt5 UI code generator.

В библиотеке Qt присутствует класс QCompleter, который позволяет предлагать автодополнение к вводимому слову в полях ввода. Также данный класс поддерживается и библиотекой PyQt5.

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

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

Рекомендуем хостинг TIMEWEB

Рекомендуем хостинг TIMEWEB

Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.

programmy-na-pyqt5.jpg

В этой части руководства PyQt5

мы изучим некоторую базовую функциональность.

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

Пример кода выше выводит маленькое окно на экране.

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

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

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

Метод resize() изменяет размер виджета. Здесь задана ширина 250px и высота 150px.

Метод move() перемещает виджет на позицию с координатами x=300 и y=300 на экране.

Здесь мы устанавливаем название нашего окна. Оно показывается в строке заголовка.

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

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

Метод exec_() содержит нижнее подчеркивание, потому что exec – уже используемое имя в Python. И, соответственно, имя exec_() было использовано взамен.

Окно Simple

Рисунок: Окно Simple

Иконка приложения

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

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

Есть три важных вещи в объектно-ориентированном программировании – это классы, данные и методы. Здесь мы создаём новый класс с именем Example. Класс Example наследуется из класса QWidget. Это значит, что мы вызываем два конструктора: первый для класса Example и второй для унаследованного класса. Метод super() возвращает объект родителя класса Example и мы вызываем его конструктор. Метод __init__() – это конструктор класса в языке Python.

Создание GUI поручено методу initUI().

Все три метода были унаследованы из класса QWidget. setGeometry делает две вещи: он определяет место окна на экране и устанавливает его размер. Первые два параметра – позиции x и y нашего окна. Третий – ширина, и четвёртый – высота окна. Фактически, setGeometry сочетает методы resize() и move() в одном. Последний метод устанавливает иконку приложения. Чтобы сделать это, мы создали объект QIcon. QIcon принимает путь к нашей иконке для её отображения.

Приложение и объекты примера созданы. Главный цикл запущен.

Рисунок: Окно с иконкой

Показ всплывающих подсказок

Мы можем обеспечить любой из наших виджетов всплывающей подсказкой.

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

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

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

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

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

Всплывающие подсказки

Рисунок: Всплывающие подсказки

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

Ниже следует конструктор виджета QPushButton, который мы используем в нашем примере.

Параметр string_text – это текст, который будет отображён на кнопке. Parent – это виджет, на котором мы разместим нашу кнопку. В этом случае это будет QWidget.

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

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

Нам необходим объект из модуля QtCore.

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

Система обработки событий в PyQt5 построена на механизме сигналов и слотов. Если мы кликаем по кнопке, выдаётся сигнал clicked. Слот может быть слотом Qt или любым слотом, вызываемым из Python. QCoreApplication содержит цикл главного события; он обрабатывает и выполняет все события. Метод instance даёт нам его текущий экземпляр. Заметим, что QCoreApplication создаётся с QApplication. Кликнутый сигнал соединяется с методом quit(), который и завершает приложение. Взаимосвязь сделана между двумя объектами: отправителем и получателем. Отправитель – нажатие кнопки, получатель – объект приложения.

Рисунок: Кнопка выхода

Диалоговое окно

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

Диалоговое окно

Рисунок: Диалоговое окно

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

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

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

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

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

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

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

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

В этой статье рассказывается о разработке простого диалогового окна с помощью инструмента PyQt5 designer tool, а также о преобразовании и интеграции его в python.

Как настроить конструктор PyQt5 и интегрировать пользовательский интерфейс

С PyQt5 вам нужно хорошо разбираться в базовом Python, но я постараюсь сделать это как можно проще.

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

Инструменты, Технологии и библиотеки:

Операционная система: Windows 10

Редактор: Код Visual Studio

Python: 3.6

Библиотеки PyQt5: Если вы еще не установили Python 3.6 на свою ОС, перейдите по этой ссылке , чтобы загрузить установщик Python.

Pip (система управления пакетами, используемая для установки и управления библиотеками и пакетами, написанными на python) должна быть установлена как часть Python.

Если вы не можете найти установку трубы, следуйте инструкциям здесь .

После установки Python и pip используйте следующие команды для установки конструктора PyQt5, инструментов и пакетов.

Вы найдете различные библиотеки с папками PyQt5, установленными в этом месте по умолчанию: C:\Program Файлы (x86)\Python 36-32\Lib\site-packages (в ОС Windows).

Как запустить инструмент PyQt5 Designer

Перейти к C:\Program Файлы (x86)\Python 36-32\Lib\site-packages\pyqt5-tools и найдите designer.exe . Дважды щелкните, чтобы открыть Qt Designer.

Примечание: Путь будет варьироваться в зависимости от используемой ОС.

Qt Designer предоставит некоторые базовые шаблоны. Выберите шаблон “Диалог с кнопками справа”, как показано на скриншоте ниже.

Выбор шаблона PyQt5

Вы можете изменить свойства диалогового окна с помощью редактора свойств. Я просто изменил название окна.

Теперь сохраните разработанный диалог как dialog.ui .

Диалог преобразования.ui to dialog.py

Используйте приведенную ниже команду в командной строке.

Приведенная выше команда преобразует файл dialog.ui в dialog.py .

Затем мы внесем некоторые незначительные изменения и выполним код Python. Я изменил имя класса, сгенерированное командой, чтобы сохранить его значение.

Это окончательный код класса Dialog, сгенерированный из файла dialog.ui.

Это окончательный код класса Dialog, сгенерированный из файла dialog.ui.

Это окончательный код класса Dialog, сгенерированный из файла dialog.ui.

Теперь выполните команду app.py и… вот так. С тобой покончено! Диалог будет выглядеть так.

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

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

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