Как сделать приложение на python qt designer с функцией нажатия кнопок

Обновлено: 07.07.2024

PyQt5 основные элементы управления подробное объяснение QPushButton (6)

предисловие

Класс QAbstractButton является абстрактным классом и не может быть реализован. Другие классы кнопок должны наследовать класс QAbstractButton для достижения различных функций и проявлений. Общие кнопки QPushButton, QToolButton, QRadioButton и QCheckBox все унаследованы от класса QAbstractButton. Используйте сцену, чтобы показать через график

Статус, предоставляемый QAbstractButton, выглядит следующим образом

состояние смысл
isDown() Подскажите, была ли нажата кнопка
isChecked() Подскажите, была ли кнопка помечена
isEnable() Подскажите, может ли кнопка быть нажата пользователем
isCheckAble() Подскажите, можно ли пометить кнопку
setAutoRepeat() Установите, может ли кнопка автоматически повторяться, когда пользователь долго нажимает

Сигналы, предоставляемые QAbstractButton, следующие

сигнал смысл
Pressed Этот сигнал срабатывает, когда указатель мыши находится на кнопке и нажата левая кнопка
Released Этот сигнал срабатывает при отпускании левой кнопки мыши
Clicked Этот сигнал срабатывает, когда левая кнопка мыши нажата, а затем отпущена, или когда отпущена клавиша быстрого доступа.
Toggled Этот сигнал срабатывает при изменении состояния метки кнопки

QPushButton

Общие методы в классе QPUshButton

Установить горячие клавиши для QPushButton

Пример: использование кнопки QPushButton

这里写图片描述

Таблица эффектов выглядит следующим образом

Анализ кода

В этом примере создаются четыре кнопки. Четыре объекта QPushButton определяются как переменные экземпляра класса. Каждая кнопка отправляет сигнал щелчка в указанную функцию слота в ответ на событие нажатия кнопки.

Первая кнопка btn1, ** через функцию toggle () для переключения состояния кнопки, основной код

self.btn1=QPushButton('Button1')
self.btn1.setCheckable(True)
self.btn1.toggle()

Когда эта кнопка нажата, сигнал щелчка отправляется функции слота btnstate (), и состояние, нажата или отпущена кнопка, получается через btn.isChecked. Код ядра

Вторая кнопка btn2, которая отображает значок выше, использует метод setIcon (), чтобы принять файл изображения объекта QPixmap в качестве входного параметра, и его основной код
self.btn2.setIcon (QIcon (QPixmap ('E: \ pyqt5Quick разработка и реальный бой \ Chapter 4 \ images \ python.jpg')))

Третья кнопка btn3, используйте метод setEnabled (), чтобы отключить кнопку btn3

Я только начал использовать и открывать для себя PyQt5 и Qt. Я установил его с pip install pyqt5 . Затем я открыл designer.exe , который идет с pyqt-tools , и создал свой дизайн.

После этого я преобразовал его из .ui в .py с помощью pyuic design.ui > dialog.py .

Когда я запускаю app.py , он работает нормально, и пользовательский интерфейс работает нормально. Но теперь моя проблема: как мне добавить функции, которые вызываются при нажатии кнопки?

Вот мой код app.py :

2 ответа

Ваш подход на самом деле правильный (по крайней мере, один из правильных): файлы, созданные pyuic , не должны никогда изменяться, если вы действительно ( ДЕЙСТВИТЕЛЬНО ) не знаете, что ты делаешь и зачем. Кроме того, никогда не следует имитировать их поведение, поскольку для этого нет причин.

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

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

То, что вы делаете, известно как подход одиночного наследования , что означает, что вы создаете подкласс, который наследуется только от подкласса QWidget, который вы используете (QDialog, в данном случае), и вы построение пользовательского интерфейса поверх него с использованием так называемого класса формы . Класс формы - это стандартный тип Python object , который отвечает за создание всех дочерних виджетов поверх экземпляра основного подкласса при вызове его функции setupUi .
В результате экземпляр подкласса всегда будет ссылаться на self в пределах его области действия , в то время как все его дочерние элементы доступны через объект self.ui .

Похожий (и более распространенный) подход - это подход множественного наследования . Таким образом, вы наследуете от обоих подкласс QWidget (QDialog) и объект ui . Результат пользовательского интерфейса будет таким же, но виджеты будут более доступны с помощью self.objectName вместо self.ui.objectName .

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

Итак, в вашем случае (с подходом с единым наследованием) все объекты, созданные в Designer, фактически доступны с помощью self.ui.objectName , и этот objectName - это то, что отображается в инспекторе объектов Designer.

Предположим, вы создали пользовательский интерфейс с помощью одной кнопки и хотите что-то напечатать, когда эта кнопка нажата. Если вы не выполнили слишком много тестов и изменений в своем пользовательском интерфейсе, имя объекта этой кнопки, вероятно, будет "pushButton".

Тогда ваш код, вероятно, будет выглядеть так:

Обратите внимание, что имена объектов Qt не уникальны. Теоретически вы можете установить одно и то же имя объекта для нескольких QObject (или QWidget), но в этом нет никакого смысла. Учтите, что с точки зрения Python: каждая переменная должна иметь собственное имя, если вы перезапишете уже существующее имя переменной, предыдущее станет недоступным (если даже не будет собрано мусор).
Дизайнер достаточно умен (не то чтобы для этого требовалось так много . ), чтобы предотвратить создание объектов с одинаковым именем объекта, и поэтому, если вы добавите еще одну кнопку, она будет называться pushButton_2 , pushButton_3 , и т.д. PyQt извлекает выгоду из этого, создавая уникальные атрибуты экземпляра для всех имен объектов, независимо от того, используете ли вы файл pyuic или uic.loadUi() .

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

В свете того, что объяснялось выше, рассмотрите проблему имени атрибута: если вы создаете атрибут с именем self.pushButton перед вызовом self.setupUi , после этого вызова self.pushButton будет ссылкой на кнопку и ранее установленное значение будет потеряно; если вы создадите новый атрибут с именем self.pushButton после вызова self.setupUi , вы больше не сможете получить доступ к экземпляру QPushButton.

Теперь, хотя при обычном использовании они обычно ведут себя одинаково, есть небольшие, но все же важные различия между использованием файлов, сгенерированных pyuic или uic.loadUiType() , и более прямым uic.loadUi и К сожалению, эти различия официально не задокументированы (и, честно говоря, я не помню их всех).

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

Я бы порекомендовал вам не программировать на этом преобразованном pythonscript. Просто потому, что если вы хотите изменить свой макет и снова преобразовать его, вы перезаписываете все, что там запрограммировано.

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

QPushButton наследует QAbstractButton который в свою очередь наследует QWidget.

Сигналы

Унаследованные от QAbstractButton

  • void clicked( bool checked = false )
  • void pressed ()
  • void released ()
  • void toggled( bool checked )

Унаследованные от QWidget

  • void customContextMenuRequested ( const QPoint & pos )

Унаследованные от QObject

Основное использование

Текст

Текст QPushButton может быть установлен при создании или использовании setText(). Для получения текущего текста кнопки используйте text().

Иконка

Икона QPushButton также может быть установлена при создании. После создания кнопки, иконку можно изменить с помощью setIcon(). Для получения текущей иконки кнопки используйте icon()

Установка позиции и размера

Чтобы задать позицию и размер кнопки используйте setGeometry(). Если вы хотите просто изменить размер кнопки используйте resize().

Обработка сигналов кнопки

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

connect(m_button, SIGNAL (released()),this, SLOT (handleButton()));

Пример

Следующий простой фрагмент кода показывает, как создавать и использовать QPushButton. Это было проверено на Qt Symbian Simulator.

Создается экземпляр QPushButton. Сигнал released() соединятся со слотом handleButton() который изменяет текст и размер кнопки.


Основы

Введение в тему

В данном уроке по PyQt5 мы изучим, как использовать Пайтон и Qt для создания графического интерфейса пользователя в самых распространённых операционных системах.

Что такое pyqt5

PyQt – это модуль, предназначенный для создания графических интерфейсов в Python через библиотеку Qt. Эта библиотека написана на языке C++ и является одним из самых популярных инструментов разработки GUI, а также имеет обширное сообщество. Существует и альтернатива: модуль PySide. Различаются они тем, что PyQt нельзя свободно использовать в коммерческих проектах, однако, этот модуль, всё же, более зрелый. Существуют и другие распространённые средства создания графических интерфейсов:

Установка pyqt

Устанавливать модуль будем в виртуальную среду. Для этого вводим в консоли:

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

Для остальных ОС это делается так:

Если всё получилось, в начале строки в терминале появится префикс (venv).

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

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

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

Теперь необходимо создать объект приложения QApplication при помощи следующей команды:

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

sys.argv – аргументы командной строки и теперь Вы можете запустить свой скрипт из консоли, передав при этом какие-то аргументы.

Дальше нужно создать виджет (о них мы поговорим чуть позже):

На данный момент наш маленький интерфейс готов, но, чтобы его увидел пользователь, надо использовать метод show:

Внешний вид будет зависеть от Вашей операционной среды.

Осталось запустить приложение:

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

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

Виджеты

Виджеты – это все видимые части интерфейса. Они могут быть вложены друг в друга.

На этом изображении представлены самые часто встречающиеся виджеты:

PyQt

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

  • QLabel — обеспечивает отображение текста или изображения
  • QComboBox — представляет собой комбинированную кнопку и всплывающий список
  • QCheckBox — предоставляет флажок с текстовой меткой
  • QRadioButton — предоставляет переключатель с текстовой меткой
  • QPushButton — предоставляет командную кнопку
  • QTableWidget — предоставляют стандартные средства отображения таблиц для приложений
  • QLineEdit – изменяемая строка
  • QSlider — вертикальный или горизонтальный ползунок
  • QProgressBar — предоставляет горизонтальную или вертикальную полосу выполнения

Есть ещё несколько важных методов виджетов, о которых нельзя не рассказать:

resize() — изменяет размеры виджета.

move() — двигает виджет на экране.

setWindowTitle() – устанавливает название окна.

Этот код создаёт пустое окно размером 750*650 пикселей, расположенное в верхнем левом углу. Название окна — ‘My Window’.

Есть ещё очень важный инструмент для создания интерфейсов — Qt Designer. Это программа, которая делает проще процесс создания графического интерфейса программы, конечно внешний вид можно сделать и без помощи данной программы, но не для всех это будет удобно. На данный момент разработчики прекратили поддержку этого инструмента.

Макеты

Чаще всего приложение состоит из целого набора виджетов. Если так, то нужно объяснить Qt, как их разместить внутри окна. Например, вы можете использовать QHBoxLayout для горизонтального расположения виджетов:

Листинг кода, создающего окно, представленное на изображении выше:

Что здесь происходит? Сперва мы импортируем необходимые модули, затем создаём объект приложения. Создаём виджет типа QWidget. Это базовый тип, не имеющий поведения. Дальше инициируем макет (mylayout), а в нём две кнопки QPushButton. Строка mywindow.setLayout(mylayout) говорит QT что для виджета mywindow будет использоваться именно этот макет. Делаем всё это видимым и запускаем.

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

QHBoxLayout – располагает виджеты горизонтально.

QVBoxLayout — располагает виджеты вертикально.

QGridLayout – сеточный макет. Этот макет делит пространство на строки и столбцы.

QFormLayout — размещает свои дочерние элементы в виде двух столбцов.

Если Вы знакомы с языком CSS, то, конечно же, заметили что QHBoxLayout и QVBoxLayout похожи на flexbox, а QGridLayout – на grid.

Еще раз здравствуйте формучане.
Помогите обработать кнопки для интерфейса
Интерфейс на фото.

Но интефейс почему то не стартует. При нажатие кнопок они появляються в lcdNumber как пин код. При нажатии ентера введеная комбинация появляется в alert. HideShow - скрыват или отображает введенную комбинацию в lcdNumber. Cancel - отменяет введенную цыфру, а Clear - удаляет все.
Буду благодарен за помощь !


Обработка кнопок
Как в XNA обработать нажатия кнопок? Не держания(IsKeyDown), а именно нажатие (то есть нажал -.

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

Обработка кнопок
Добрый день. Постараюсь изложить в краце суть проблемы. Я студент и по лабе нужно создать кнопку.

Обработка кнопок
Как сделать чтобы, я нажал на "Q", label стал прозрачным, опять нажал на "Q" он видимым и т.д.

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