Примеры программ на pyqt

# главное окно приложения расширяет класс QWidget
class MainWidget(QWidget):

# список предложений
strings = [«Раз два три», «Четыре пять шесть», «Семь восемь девять», «Просто тест», «Как так это»]

# конструктор
def __init__(self):
super().__init__()

# создаем кнопку
self.button = QPushButton(«Нажмите на меня!»)
# создаем текстовую метку отцентиророванную посередине контейнера
self.text = QLabel(«Привет, меня зовут PyQt.», alignment=Qt.AlignCenter)

# вертикальная разметка
self.layout = QVBoxLayout(self)
# добавляем виджеты в разметку
self.layout.addWidget(self.text)
self.layout.addWidget(self.button)

# назначаем обработчки для копки на событие клика
self.button.clicked.connect(self.randomSentence)

if __name__ == «__main__»:
# главный класс приложения принимает строку — заголовок окна

Делаем приложение на Python и PyQt5 / Урок #1


app = QApplication([‘Пример прииложения на PyQT’])

# создаем главный виджет размером 800×600 и отображаем его
widget = MainWidget()
widget.resize(800, 600)
widget.show()

Создано 18.11.2021 08:30:28

  • Михаил Русаков
  • Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!

    Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
    Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.

    Если Вы не хотите пропустить новые материалы на сайте,
    то Вы можете подписаться на обновления: Подписаться на обновления

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

    Порекомендуйте эту статью друзьям:

    Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

    1. Кнопка:
      Она выглядит вот так:
    2. Текстовая ссылка:
      Она выглядит вот так: Как создать свой сайт
    3. BB-код ссылки для форумов (например, можете поставить её в подписи):

    Комментарии ( 0 ):

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

    Источник: myrusakov.ru

    Интерфейс на Python: пишем с помощью PyQt

    На языке Python написаны такие гиганты, как YouTube и Instagram. Если у вас в планах написать свой клевый сервис, то пора познакомиться с азами разработки UI.

    Читайте также:
    Программа для настройки прэм

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

    ПРОГРАММА КОНВЕРТЕР ВАЛЮТ с графическим интерфейсом на PyQT5 | PYTHON

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

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

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

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

    • clicked — Данный сигнал испускается при активизации кнопки (т.е. когда нажатая кнопка отпускается при нахождении указателя мыши внутри кнопки)
    • pressed — Событие генерируется при нажатии кнопки мыши
    • released — Событие генерируется при отпускании кнопки мыши (которая была нажата раньше)
    • textChanged — генерация сигнала, когда происходит изменение текста (само изменение текста — это событие),
    • valueChanged — генерация сигнала, когда происходит изменение значения

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

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

    Пример:

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

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

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

    Читайте также:
    Что такое торо программа

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

    Когда мы кликаем на объект срабатывает событие (метод) mousePressEvent . Функция emit() служит как раз для генерации сигнала. Обработчиком в нашем примере является вызов функции on_clicked , которую мы написали ниже — она просто выводит сообщение в консоль. Функция on_clicked является слотом .

    Обратите внимание, что в данном примере срабатывает два сигнала — собственный, который мы создали и встроенным — стандартным ( self.close — вызов функции закрытия окна). Именно поэтому при клике мы видим сообщение в консоли и наше окно закрываются.

    import sys from PyQt5.QtCore import pyqtSignal, QObject from PyQt5.QtWidgets import QMainWindow, QApplication # базовый класс для всех объектов модуля class AnyObjects(QObject): # создаем свой сигнал own_signal = pyqtSignal() # создаем главное окно class MainWindow(QMainWindow): def __init__(self): super().__init__() self.set_params() # метод, который срабатывает при нажатии на окно def mousePressEvent(self, event): # генерируем сигнал self.ao.own_signal.emit() self.close() def set_params(self): self.ao = AnyObjects() # обработчик сигнала, связанного с объектом self.ao.own_signal.connect(self.on_clicked) # параметры главного окна self.setGeometry(900, 300, 290, 150) self.setWindowTitle(‘Пример работы самописного сигнала’) self.show() def on_clicked(self): print(‘Тут сообщение’) if __name__ == ‘__main__’: app = QApplication(sys.argv) mw = MainWindow() sys.exit(app.exec_())

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

    Интерфейс на Python: пишем с помощью PyQt

    Результат после клика по окну (1 — оно закрылось, 2 — вывелось сообщение)

    Интерфейс на Python: пишем с помощью PyQt

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

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

    Читайте также:
    1с садовод инструкция по работе с программой

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

    Интерфейс на Python: пишем с помощью PyQt

    Фоновые задачи с помощью PyQt на Python

    Язык программирования Python

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

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

    Например, метод button1_pressed(), который вызывается этой библиотекой, когда пользователь нажимает на элемент управления button1.

    При работе с Qt способ реагирования на эти события обычно заключается в подключении сигнала к слоту.

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

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

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

    Перейдем к конкретному примеру.

    Следующий код дублирует окно с меткой (QLabel) и кнопкой (QPushButton), которая при нажатии загружает файл, используя стандартный модуль urllib.request.

    #!/usr/bin/env python # -*- coding: utf-8 -*- from urllib.request import urlopen from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel, QPushButton class MainWindow(QMainWindow): def __init__(self): super().__init__() self.setWindowTitle(«Пример загрузки файла») self.resize(400, 300) self.label = QLabel(«Нажмите кнопку, чтобы начать загрузку.», self) self.label.setGeometry(20, 20, 200, 25) self.button = QPushButton(«Начать скачивание», self) self.button.move(20, 60) self.button.pressed.connect(self.downloadFile) def downloadFile(self): self.label.setText(«Загрузка файла. «) # Отключение кнопки во время загрузки файла. self.button.setEnabled(False) url = «https://www.python.org/ftp/python/3.7.2/python-3.7.2.exe» filename = «python-3.7.2.exe» # Открываем URL. with urlopen(url) as r: with open(filename, «wb») as f: # Чтение удаленного файла и запись локального файла. f.write(r.read()) self.label.setText(«Файл загружен!») # Сброс кнопки. self.button.setEnabled(True) if __name__ == «__main__»: app = QApplication([]) window = MainWindow() window.show() app.exec_()

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

    Рейтинг
    ( Пока оценок нет )
    Загрузка ...
    EFT-Soft.ru