Pycharm pyqt: Настройка PyCharm для работы с библиотекой PyQt5
Настройка PyCharm для работы с библиотекой PyQt5
Библиотека PyQt — расширение языка Python, которое позволяет использовать практически все функции Qt, а именно: работать с пользовательским интерфейсом, базами данных, заниматься сетевым программированием и с лёгкостью обрабатывать XML и SVG-файлы. Изначально PyCharm не рассчитан на работу с PyQt 5, вернее стандартные возможности IDE по отношению к библиотеке несколько ограничены. Немного поработав напильником можно превратить PyCharm в полноценную IDE для разработки на PyQt.
Первым делом подключим Designer, чтобы можно было более удобно создавать ui-файлы.
Шаг 1. Переходим в меню «File» → «Settings» → «Tools» → «External tools»
Шаг 2. Нажимаем на зелёный крестик, чтобы создать новый инструмент.
Шаг 3. Вписываем следующие данные
Прошу заметить, что я написал -qt=5 в поле Parameters. Сделал я это потому, что у меня установлено две версии Qt: 4.8.6 и 5.4.2. Соответственно и две версии Designer, поэтому запуск программ у меня происходит через qt-chooser , которому собственно и передаётся параметр -qt=5. Если вы используете только одну версию Qt, то -qt=5 можно опустить.
Теперь добавим новый тип файла (для ui).
Шаг 1. «File» → «Settings» → «Editor» → «File and code Templates»
Шаг 2. Нажимаем на зелёный крестик, чтобы добавить описание нового шаблона
Шаг 3. Заполняем все поля согласно образцу
Вот код для вставки в поле
<?xml version="1.0" encoding="UTF-8"?> <ui version="4.0"> <class>Form</class> <widget name="Form"> <property name="geometry"> <rect> <x>0</x> <y>0</y> <width>640</width> <height>480</height> </rect> </property> <property name="windowTitle"> <string>Form</string> </property> </widget> <resources/> <connections/> </ui>
Шаг 4. Нажимаем «OK».
Теперь у нас появилась возможность не только создавать файлы форм, но и запускать Qt Designer не выходя из PyCharm. Делается это следующим образом:
Наводим курсор на UI-файл → Правая кнопка мыши → «External tools» → «Qt Designer»
IDE для Python – База знаний Timeweb Community
Популярность Python как языка программирования меняется из года в год. Python стал языком года в 2007 и 2010 годах (TIOBE), да и сейчас стабильно входит в десятку — а то и пятерку — самых популярных и используемых языков программирования.
Python любят за лаконичный код, который легко понять, низкий порог вхождения и возможность использовать этот язык практически для любых задач. Python имеет большое сообщество, его используют во многих компаниях с мировым именем: Google, Facebook, Microsoft, Intel и так далее.
IDE
PyCharm представляет собой IDE для Python.
IDE — Integrated development environment — интегрированная среда разработки, комплекс программных средств, которые позволяют вести более удобную разработку на определенном языке программирования. Обычно IDE имеет текстовый редактор, компилятор или интерпретатор, отладчик и другое программное обеспечение.
IDE позволяет увеличить скорость разработки (при условии предварительного обучения работе с IDE, естественно).
PyCharm
PyCharm — это интегрированная среда разработки для Python, которая имеет полный комплект средств, необходимых для эффективного программирования на Python.
Первая версия вышла в 2010 году.
Сейчас PyCharm распространяется в двух вариантах: платном (PyCharm Professional Edition) и бесплатном (PyCharm Community Edition).
Бесплатная версия имеет открытый исходный код и распространяется под лицензией Apache 2. Это облегченная среда, которая подходит для разработки только на Python.
Платный вариант представляет собой более расширенную и функциональную версию с возможностью разработки в том числе многоязычных веб-приложений. Professional Edition поддерживает фреймворки:
- Django,
- Flask,
- Google App Engine,
- Pyramid,
- web2py
И дает возможность удаленной разработки, а также работы с базами данных.
Преимущества PyCharm
PyCharm имеет удобный редактор кода со всеми полезными функциями: подсветкой синтаксиса, автоматическим форматированием, дополнением и отступами. PyCharm позволяет проверять версии интерпретатора языка на совместимость, а также использовать шаблоны кода.
Тем, кто часто использует документацию, будет удобно смотреть ее прямо в окне редактора (для элементов) либо в браузере (для внешней документации).
PyCharm позволяет быстро производить рефакторинг кода, а также использовать удобный графический отладчик.
Утилита поддерживает все свежие версии Django, а также IronPython, Jython, Cython, PyPy wxPython, PyQt, PyGTK и многие другие инструменты.
В PyCharm можно проводить интегрированное Unit тестирование, использовать интерактивные консоли для Python, Django, SSH, отладчика и баз данных.
PyCharm имеет большую коллекцию плагинов, и его можно использовать в связке с разными трекерами вроде JIRA, Youtrack, Lighthouse, Redmine, Trac и так далее.
PyCharm кросс-платформенная среда разработки: можно использовать на Linux, Windows и Mac OS.
Как установить PyCharm на Ubuntu 16.04
Существует несколько способов установить PyCharm на Ubuntu, самым простым, пожалуй, будет установка snap-пакета в Ubuntu Software Center. Нужно просто ввести название в поисковую строку и установить оттуда:
Версию для сообщества можно также установить командой
$ sudo snap install pycharm-community --classic
Еще один способ — использование unmake. Это инструмент, который позволяет удобно и легко устанавливать инструменты для разработки. Сначала нужно установить последнюю версию unmake, взяв ее из PPA репозитория:
$ sudo add-apt-repository ppa:ubuntu-desktop/ubuntu-make $ sudo apt-get update $ sudo apt-get install ubuntu-make
Команда для установки PyCharm:
Команда для установки профессиональной версии:
$ umake ide pycharm-professional
А когда программа станет не нужна, ее можно удалить командой:
Заключение
PyCharm можно назвать одной из лучших IDE для Python. В зависимости от своих возможностей и потребностей можно выбрать либо платную профессиональную версию, либо бесплатную версию для сообщества.
PyQt — Краткое руководство — CoderLessons.com
PyQt — это набор инструментов для графического интерфейса. Это интерфейс Python для Qt , одной из самых мощных и популярных кроссплатформенных библиотек графического интерфейса. PyQt был разработан RiverBank Computing Ltd. Последнюю версию PyQt можно скачать с ее официального сайта — riverbankcomputing.com
PyQt API — это набор модулей, содержащих большое количество классов и функций. В то время как модуль QtCore содержит функции не-GUI для работы с файлами, каталогами и т. Д., Модуль QtGui содержит все графические элементы управления. Кроме того, существуют модули для работы с XML (QtXml) , SVG (QtSvg) , SQL (QtSql) и т. Д.
Поддерживающая среда
PyQt совместим со всеми популярными операционными системами, включая Windows, Linux и Mac OS. Это двойная лицензия, доступная под GPL, а также коммерческая лицензия.
Windows
Вы можете скачать и установить соответствующий установщик по ссылке выше, соответствующей версии Python (2.7 или 3.4) и аппаратной архитектуре (32-битная или 64-битная). Обратите внимание, что есть две версии PyQt, а именно PyQt 4.8 и PyQt 5.5 .
Хотя PyQt4 доступен как для Python 2, так и для Python 3, PyQt5 можно использовать только вместе с Python 3. *.
PyQt4 Windows Binaries
PyQt4-4.11.4-GPL-Py3.4-Qt4.8.7-x64.exe | 64-битный установщик Windows |
PyQt4-4.11.4-GPL-Py3.4-Qt4.8.7-x32.exe | 32-битный установщик Windows |
PyQt4-4.11.4-GPL-Py3.4-Qt5.5.0-x64.exe | 64-битный установщик Windows |
PyQt4-4.11.4-GPL-Py3.4-Qt5.5.0-x32.exe | 32-битный установщик Windows |
PyQt4-4.11.4-GPL-Py2.7-Qt4.8.7-x64.exe | 64-битный установщик Windows |
PyQt4-4. 11.4-GPL-Py2.7-Qt4.8.7-x32.exe | 32-битный установщик Windows |
PyQt5 Windows Binaries
PyQt5-5.5-GPL-Py3.4-Qt5.5.0-x64.exe | 64-битный установщик Windows |
PyQt5-5.5-GPL-Py3.4-Qt5.5.0-x32.exe | 32-битный установщик Windows |
Linux
Для Ubuntu или любого другого дистрибутива Debian Linux используйте следующую команду для установки PyQt —
sudo apt-get install python-qt4 or sudo apt-get install pyqt5-dev-tools
Вы также можете создать исходный код, доступный на странице загрузки.
PyQt-x11-GPL-4.11.4.tar.gz | Linux, исходный код UNIX для PyQt4 |
PyQt-GPL-5.5.tar.gz | Linux, UNIX, MacOS / X источник для PyQt5 |
Mac OS
Проект PyQtX ( http://sourceforge.net/projects/pyqtx/ ) содержит двоичные файлы PyQt для Mac. Используйте установщик Homebrew согласно следующей команде —
brew install pyqt
Создание простого приложения с графическим интерфейсом с использованием PyQt включает в себя следующие шаги:
Импортировать модуль QtGui.
Создайте объект приложения.
Объект QWidget создает окно верхнего уровня. Добавьте в него объект QLabel.
Установите заголовок ярлыка «Привет, мир».
Определите размер и положение окна методом setGeometry ().
Введите основной цикл приложения методом app.exec_ () .
Импортировать модуль QtGui.
Создайте объект приложения.
Объект QWidget создает окно верхнего уровня. Добавьте в него объект QLabel.
Установите заголовок ярлыка «Привет, мир».
Определите размер и положение окна методом setGeometry ().
Введите основной цикл приложения методом app.exec_ () .
import sys from PyQt4 import QtGui def window(): app = QtGui.QApplication(sys.argv) w = QtGui.QWidget() b = QtGui.QLabel(w) b.setText("Hello World!") w.setGeometry(100,100,200,50) b.move(50,20) w.setWindowTitle(“PyQt”) w.show() sys.exit(app.exec_()) if __name__ == '__main__': window()
Приведенный выше код производит следующий вывод —
PyQt API — это большая коллекция классов и методов. Эти классы определены в более чем 20 модулях. Ниже приведены некоторые из часто используемых модулей —
Sr.No. | Модули и описание |
---|---|
1 | QtCore Основные не-GUI классы, используемые другими модулями |
2 | QtGui Компоненты графического интерфейса пользователя |
3 | QtMultimedia Занятия по низкоуровневому мультимедийному программированию |
4 | QtNetwork Занятия по сетевому программированию |
5 | QtOpenGL Поддержка классов OpenGL |
6 | QtScript Классы для оценки Qt Scripts |
7 | QtSql Классы для интеграции баз данных с использованием SQL |
8 | QtSvg Классы для отображения содержимого файлов SVG |
9 | QtWebKit Классы для рендеринга и редактирования HTML |
10 | QtXml Классы для обработки XML |
11 | QtAssistant Поддержка онлайн-справки |
12 | QtDesigner Классы для расширения Qt Designer |
QtCore
Основные не-GUI классы, используемые другими модулями
QtGui
Компоненты графического интерфейса пользователя
QtMultimedia
Занятия по низкоуровневому мультимедийному программированию
QtNetwork
Занятия по сетевому программированию
QtOpenGL
Поддержка классов OpenGL
QtScript
Классы для оценки Qt Scripts
QtSql
Классы для интеграции баз данных с использованием SQL
QtSvg
Классы для отображения содержимого файлов SVG
QtWebKit
Классы для рендеринга и редактирования HTML
QtXml
Классы для обработки XML
QtAssistant
Поддержка онлайн-справки
QtDesigner
Классы для расширения Qt Designer
PyQt API содержит более 400 классов. Класс QObject находится на вершине иерархии классов. Это базовый класс всех объектов Qt. Кроме того, класс QPaintDevice является базовым классом для всех объектов, которые могут быть нарисованы.
Класс QApplication управляет основными настройками и потоком управления приложения с графическим интерфейсом. Он содержит основной цикл событий, внутри которого обрабатываются и отправляются события, генерируемые элементами окна и другими источниками. Он также обрабатывает настройки всей системы и приложения.
Класс QWidget , производный от классов QObject и QPaintDevice, является базовым классом для всех объектов пользовательского интерфейса. Классы QDialog и QFrame также являются производными от класса QWidget. У них есть своя собственная система подклассов.
Следующие диаграммы изображают некоторые важные классы в их иерархии.
Вот список избранных часто используемых виджетов —
Ниже приведены наиболее часто используемые виджеты.
Sr.No. | Виджеты и описание |
---|---|
1 | QLabel Используется для отображения текста или изображения |
2 | QLineEdit Позволяет пользователю ввести одну строку текста |
3 | QTextEdit Позволяет пользователю вводить многострочный текст |
4 | QPushButton Командная кнопка для вызова действия |
5 | QRadioButton Позволяет выбрать один из нескольких вариантов |
6 | QCheckBox Позволяет выбрать более одного варианта |
7 | QSpinBox Позволяет увеличить / уменьшить целочисленное значение |
8 | QScrollBar Позволяет получить доступ к содержимому виджета за пределами апертуры дисплея |
9 | QSlider Позволяет изменять граничное значение линейно. |
10 | QComboBox Предоставляет выпадающий список элементов для выбора |
11 | QMenuBar Турник, содержащий объекты QMenu |
12 | QStatusBar Обычно в нижней части QMainWindow, предоставляет информацию о состоянии. |
13 | QToolBar Обычно в верхней части QMainWindow или плавающий. Содержит кнопки действий |
14 | QListView Предоставляет выбор списка элементов в ListMode или IconMode |
15 | QPixmap Внеэкранное представление изображения для отображения на объекте QLabel или QPushButton |
16 | QDialog Модальное или немодальное окно, которое может возвращать информацию в родительское окно |
QLabel
Используется для отображения текста или изображения
QLineEdit
Позволяет пользователю ввести одну строку текста
QTextEdit
Позволяет пользователю вводить многострочный текст
QPushButton
Командная кнопка для вызова действия
QRadioButton
Позволяет выбрать один из нескольких вариантов
QCheckBox
Позволяет выбрать более одного варианта
QSpinBox
Позволяет увеличить / уменьшить целочисленное значение
QScrollBar
Позволяет получить доступ к содержимому виджета за пределами апертуры дисплея
QSlider
Позволяет изменять граничное значение линейно.
QComboBox
Предоставляет выпадающий список элементов для выбора
QMenuBar
Турник, содержащий объекты QMenu
QStatusBar
Обычно в нижней части QMainWindow, предоставляет информацию о состоянии.
QToolBar
Обычно в верхней части QMainWindow или плавающий. Содержит кнопки действий
QListView
Предоставляет выбор списка элементов в ListMode или IconMode
QPixmap
Внеэкранное представление изображения для отображения на объекте QLabel или QPushButton
QDialog
Модальное или немодальное окно, которое может возвращать информацию в родительское окно
Типичное окно верхнего уровня на основе графического интерфейса пользователя создается объектом виджета QMainWindow . Некоторые виджеты, перечисленные выше, занимают свое назначенное место в этом главном окне, в то время как другие размещаются в центральной области виджетов с помощью различных менеджеров компоновки.
На следующей диаграмме показана структура QMainWindow —
Установщик PyQt поставляется с инструментом для создания графического интерфейса, который называется Qt Designer . Используя простой интерфейс перетаскивания, можно быстро создать интерфейс GUI без необходимости писать код. Это, однако, не IDE, такие как Visual Studio. Следовательно, Qt Designer не имеет средства для отладки и сборки приложения.
Создание интерфейса GUI с использованием Qt Designer начинается с выбора окна верхнего уровня для приложения.
Затем вы можете перетащить нужные виджеты из поля виджетов на левой панели. Вы также можете присвоить значение свойствам виджета, заложенным в форму.
Разработанная форма сохраняется как demo.ui. Этот файл пользовательского интерфейса содержит XML-представление виджетов и их свойств в дизайне. Этот дизайн переведен в эквивалент Python с помощью утилиты командной строки pyuic4. Эта утилита является оберткой для модуля uic. Использование pyuic4 выглядит следующим образом —
pyuic4 –x demo.ui –o demo.py
В приведенной выше команде ключ -x добавляет небольшой объем дополнительного кода к сгенерированному XML, чтобы он стал самостоятельным исполняемым приложением.
if __name__ == "__main__": import sys app = QtGui.QApplication(sys.argv) Dialog = QtGui.QDialog() ui = Ui_Dialog() ui.setupUi(Dialog) Dialog.show() sys.exit(app.exec_())
Результирующий скрипт Python выполняется, чтобы показать следующее диалоговое окно —
Пользователь может вводить данные в поля ввода, но нажатие на кнопку «Добавить» не будет генерировать никаких действий, поскольку они не связаны ни с какой функцией. Реакция на сгенерированный пользователем ответ называется обработкой события .
В отличие от приложения в консольном режиме, которое выполняется последовательно, приложение на основе графического интерфейса пользователя управляется событиями. Функции или методы выполняются в ответ на действия пользователя, такие как нажатие кнопки, выбор элемента из коллекции или щелчок мыши и т. Д., Называемые событиями .
Виджеты, используемые для создания интерфейса GUI, служат источником таких событий. Каждый виджет PyQt, производный от класса QObject, предназначен для передачи « сигнала » в ответ на одно или несколько событий. Сигнал сам по себе не выполняет никаких действий. Вместо этого он «подключен» к « слоту ». Слот может быть любой вызываемой функцией Python .
В PyQt соединение между сигналом и слотом может быть достигнуто различными способами. Ниже приведены наиболее часто используемые методы —
QtCore.QObject.connect(widget, QtCore.SIGNAL(‘signalname’), slot_function)
Более удобный способ вызова slot_function, когда виджет испускает виджет, заключается в следующем:
widget.signal.connect(slot_function)
Предположим, должна ли функция вызываться при нажатии кнопки. Здесь нажатый сигнал должен быть подключен к вызываемой функции. Это может быть достигнуто любым из следующих двух методов —
QtCore.QObject.connect(button, QtCore.SIGNAL(“clicked()”), slot_function)
или же
button.clicked.connect(slot_function)
пример
В следующем примере два объекта QPushButton (b1 и b2) добавляются в окно QDialog. Мы хотим вызвать функции b1_clicked () и b2_clicked () при нажатии b1 и b2 соответственно.
При нажатии кнопки b1 сигнал clicked () подключается к функции b1_clicked ().
b1.clicked.connect(b1_clicked())
При нажатии кнопки b2 сигнал clicked () подключается к функции b2_clicked ().
QObject.connect(b2, SIGNAL("clicked()"), b2_clicked)
пример
import sys from PyQt4.QtCore import * from PyQt4.QtGui import * def window(): app = QApplication(sys.argv) win = QDialog() b1 = QPushButton(win) b1.setText("Button1") b1.move(50,20) b1. clicked.connect(b1_clicked) b2 = QPushButton(win) b2.setText("Button2") b2.move(50,50) QObject.connect(b2,SIGNAL("clicked()"),b2_clicked) win.setGeometry(100,100,200,100) win.setWindowTitle("PyQt") win.show() sys.exit(app.exec_()) def b1_clicked(): print "Button 1 clicked" def b2_clicked(): print "Button 2 clicked" if __name__ == '__main__': window()
Приведенный выше код производит следующий вывод —
Выход
Button 1 clicked Button 2 clicked
GUI-виджет можно разместить внутри окна контейнера, указав его абсолютные координаты, измеренные в пикселях. Координаты указаны относительно размеров окна, определенного методом setGeometry ().
setGeometry () синтаксис
QWidget.setGeometry(xpos, ypos, width, height)
В следующем фрагменте кода окно верхнего уровня размером 300 на 200 пикселей отображается в положении (10, 10) на мониторе.
import sys from PyQt4 import QtGui def window(): app = QtGui. QApplication(sys.argv) w = QtGui.QWidget() b = QtGui.QPushButton(w) b.setText("Hello World!") b.move(50,20) w.setGeometry(10,10,300,200) w.setWindowTitle(“PyQt”) w.show() sys.exit(app.exec_()) if __name__ == '__main__': window()
Виджет PushButton добавляется в окно и размещается в позиции 50 пикселей вправо и на 20 пикселей ниже верхней левой позиции окна.
Это абсолютное позиционирование , однако, не подходит по следующим причинам:
Положение виджета не изменяется даже при изменении размера окна.
Внешний вид может быть неодинаковым на разных устройствах отображения с разным разрешением.
Модификация в макете сложна, так как может потребоваться перепроектирование всей формы.
Положение виджета не изменяется даже при изменении размера окна.
Внешний вид может быть неодинаковым на разных устройствах отображения с разным разрешением.
Модификация в макете сложна, так как может потребоваться перепроектирование всей формы.
PyQt API предоставляет классы макета для более элегантного управления позиционированием виджетов внутри контейнера. Преимущества менеджеров по расположению над абсолютным позиционированием:
Виджеты внутри окна автоматически изменяются.
Обеспечивает равномерное отображение на устройствах отображения с различными разрешениями.
Динамическое добавление или удаление виджета возможно без изменения дизайна.
Виджеты внутри окна автоматически изменяются.
Обеспечивает равномерное отображение на устройствах отображения с различными разрешениями.
Динамическое добавление или удаление виджета возможно без изменения дизайна.
Вот список Классов, которые мы обсудим один за другим в этой главе.
Sr.No. | Классы и описание |
---|---|
1 | QBoxLayout Класс QBoxLayout выстраивает виджеты вертикально или горизонтально. Его производными классами являются QVBoxLayout (для размещения виджетов по вертикали) и QHBoxLayout (для размещения виджетов по горизонтали). |
2 | QGridLayout Объект класса GridLayout представляет собой сетку ячеек, расположенных в строках и столбцах. Класс содержит метод addWidget (). Любой виджет можно добавить, указав количество строк и столбцов ячейки. |
3 | QFormLayout QFormLayout — это удобный способ создать форму с двумя столбцами, где каждая строка состоит из поля ввода, связанного с меткой. Как правило, левый столбец содержит метку, а правый столбец содержит поле ввода. |
Класс QBoxLayout выстраивает виджеты вертикально или горизонтально. Его производными классами являются QVBoxLayout (для размещения виджетов по вертикали) и QHBoxLayout (для размещения виджетов по горизонтали).
Объект класса GridLayout представляет собой сетку ячеек, расположенных в строках и столбцах. Класс содержит метод addWidget (). Любой виджет можно добавить, указав количество строк и столбцов ячейки.
QFormLayout — это удобный способ создать форму с двумя столбцами, где каждая строка состоит из поля ввода, связанного с меткой. Как правило, левый столбец содержит метку, а правый столбец содержит поле ввода.
Вот список виджетов, которые мы обсудим один за другим в этой главе.
Sr.No | Виджеты и описание |
---|---|
1 | QLabel Объект QLabel выступает в качестве заполнителя для отображения нередактируемого текста или изображения или фильма с анимированным GIF. Он также может быть использован как мнемонический ключ для других виджетов. |
2 | QLineEdit QLineEdit объект является наиболее часто используемым полем ввода. Он предоставляет поле, в которое можно ввести одну строку текста. Для ввода многострочного текста необходим объект QTextEdit. |
3 | QPushButton В PyQt API объект класса QPushButton представляет кнопку, при нажатии которой можно запрограммировать вызов определенной функции. |
4 | QRadioButton Объект класса QRadioButton представляет выбираемую кнопку с текстовой меткой. Пользователь может выбрать один из многих вариантов, представленных в форме. Этот класс является производным от класса QAbstractButton. |
5 | QCheckBox Прямоугольное поле перед текстовой меткой появляется, когда объект QCheckBox добавляется в родительское окно. Так же, как QRadioButton, это также выбираемая кнопка. |
6 | QComboBox Объект QComboBox представляет раскрывающийся список элементов для выбора. Он занимает минимальное место на экране в форме, необходимой для отображения только выбранного в данный момент элемента. |
7 | QSpinBox Объект QSpinBox представляет пользователю текстовое поле, которое отображает целое число с кнопкой вверх / вниз справа. |
8 | QSlider Widget & Signal Объект класса QSlider предоставляет пользователю канавку, по которой можно перемещать маркер. Это классический виджет для управления ограниченным значением. |
9 | QMenuBar, QMenu & QAction Горизонтальный QMenuBar чуть ниже строки заголовка объекта QMainWindow зарезервирован для отображения объектов QMenu. |
10 | QToolBar Виджет QToolBar — это подвижная панель, состоящая из текстовых кнопок, кнопок с иконками или других виджетов. |
11 | QInputDialog Это предварительно настроенный диалог с текстовым полем и двумя кнопками, OK и Отмена. Родительское окно собирает ввод в текстовое поле после того, как пользователь нажимает кнопку Ok или нажимает Enter. |
12 | QFontDialog Другой часто используемый диалог, виджет выбора шрифта, — это визуальный вид класса QDialog. Результатом этого диалога является объект Qfont, который может использоваться родительским окном. |
13 | QFileDialog Этот виджет является диалоговым окном выбора файлов. Это позволяет пользователю перемещаться по файловой системе и выбирать файл для открытия или сохранения. Диалог вызывается либо через статические функции, либо путем вызова функции exec_ () для объекта диалога. |
14 | QTab Если форма имеет слишком много полей для одновременного отображения, они могут быть расположены на разных страницах, размещенных под каждой вкладкой виджета с вкладками. QTabWidget предоставляет панель вкладок и область страницы. |
15 | QStacked Функционирование QStackedWidget аналогично QTabWidget. Это также помогает в эффективном использовании клиентской области окна. |
16 | QSplitter Это еще один продвинутый менеджер компоновки, который позволяет динамически изменять размер дочерних виджетов, перетаскивая границы между ними. Элемент управления Splitter предоставляет ручку, которую можно перетаскивать для изменения размера элементов управления. |
17 | QDock Закрепляемое окно — это подокно, которое может оставаться в плавающем состоянии или может быть прикреплено к главному окну в указанной позиции. Объект главного окна класса QMainWindow имеет область, зарезервированную для закрепляемых окон. |
18 | QStatusBar Объект QMainWindow резервирует горизонтальную полосу внизу в качестве строки состояния. Он используется для отображения постоянной или контекстной информации о состоянии. |
19 | QList Класс QListWidget — это интерфейс на основе элементов для добавления или удаления элементов из списка. Каждый элемент в списке является объектом QListWidgetItem. ListWidget может быть установлен для множественного выбора. |
20 | QScrollBar Элемент управления полосой прокрутки позволяет пользователю получить доступ к частям документа, которые находятся за пределами видимой области. Он обеспечивает визуальный индикатор текущей позиции. |
21 | QCalendar QCalendar виджет является полезным элементом управления выбора даты. Это обеспечивает представление на основе месяца. Пользователь может выбрать дату с помощью мыши или клавиатуры, по умолчанию используется сегодняшняя дата. |
Объект QLabel выступает в качестве заполнителя для отображения нередактируемого текста или изображения или фильма с анимированным GIF. Он также может быть использован как мнемонический ключ для других виджетов.
QLineEdit объект является наиболее часто используемым полем ввода. Он предоставляет поле, в которое можно ввести одну строку текста. Для ввода многострочного текста необходим объект QTextEdit.
В PyQt API объект класса QPushButton представляет кнопку, при нажатии которой можно запрограммировать вызов определенной функции.
Объект класса QRadioButton представляет выбираемую кнопку с текстовой меткой. Пользователь может выбрать один из многих вариантов, представленных в форме. Этот класс является производным от класса QAbstractButton.
Прямоугольное поле перед текстовой меткой появляется, когда объект QCheckBox добавляется в родительское окно. Так же, как QRadioButton, это также выбираемая кнопка.
Объект QComboBox представляет раскрывающийся список элементов для выбора. Он занимает минимальное место на экране в форме, необходимой для отображения только выбранного в данный момент элемента.
Объект QSpinBox представляет пользователю текстовое поле, которое отображает целое число с кнопкой вверх / вниз справа.
Объект класса QSlider предоставляет пользователю канавку, по которой можно перемещать маркер. Это классический виджет для управления ограниченным значением.
Горизонтальный QMenuBar чуть ниже строки заголовка объекта QMainWindow зарезервирован для отображения объектов QMenu.
Виджет QToolBar — это подвижная панель, состоящая из текстовых кнопок, кнопок с иконками или других виджетов.
Это предварительно настроенный диалог с текстовым полем и двумя кнопками, OK и Отмена. Родительское окно собирает ввод в текстовое поле после того, как пользователь нажимает кнопку Ok или нажимает Enter.
Другой часто используемый диалог, виджет выбора шрифта, — это визуальный вид класса QDialog. Результатом этого диалога является объект Qfont, который может использоваться родительским окном.
Этот виджет является диалоговым окном выбора файлов. Это позволяет пользователю перемещаться по файловой системе и выбирать файл для открытия или сохранения. Диалог вызывается либо через статические функции, либо путем вызова функции exec_ () для объекта диалога.
Если форма имеет слишком много полей для одновременного отображения, они могут быть расположены на разных страницах, размещенных под каждой вкладкой виджета с вкладками. QTabWidget предоставляет панель вкладок и область страницы.
Функционирование QStackedWidget аналогично QTabWidget. Это также помогает в эффективном использовании клиентской области окна.
Это еще один продвинутый менеджер компоновки, который позволяет динамически изменять размер дочерних виджетов, перетаскивая границы между ними. Элемент управления Splitter предоставляет ручку, которую можно перетаскивать для изменения размера элементов управления.
Закрепляемое окно — это подокно, которое может оставаться в плавающем состоянии или может быть прикреплено к главному окну в указанной позиции. Объект главного окна класса QMainWindow имеет область, зарезервированную для закрепляемых окон.
Объект QMainWindow резервирует горизонтальную полосу внизу в качестве строки состояния. Он используется для отображения постоянной или контекстной информации о состоянии.
Класс QListWidget — это интерфейс на основе элементов для добавления или удаления элементов из списка. Каждый элемент в списке является объектом QListWidgetItem. ListWidget может быть установлен для множественного выбора.
Элемент управления полосой прокрутки позволяет пользователю получить доступ к частям документа, которые находятся за пределами видимой области. Он обеспечивает визуальный индикатор текущей позиции.
QCalendar виджет является полезным элементом управления выбора даты. Это обеспечивает представление на основе месяца. Пользователь может выбрать дату с помощью мыши или клавиатуры, по умолчанию используется сегодняшняя дата.
Виджет QDialog представляет окно верхнего уровня, в основном используемое для сбора ответа от пользователя. Он может быть сконфигурирован как модальный (где он блокирует родительское окно) или немодальный (диалоговое окно можно обойти).
PyQt API имеет несколько предварительно настроенных виджетов Dialog, таких как InputDialog, FileDialog, FontDialog и т. Д.
пример
В следующем примере атрибут WindowModality диалогового окна определяет, является ли оно модальным или немодальным. Любая кнопка в диалоговом окне может быть установлена по умолчанию. Диалог закрывается методом QDialog.reject (), когда пользователь нажимает клавишу Escape.
Нажатие кнопки в окне QWidget верхнего уровня при нажатии создает диалоговое окно. Диалоговое окно не имеет минимизировать и максимизировать элементы управления в строке заголовка.
Пользователь не может передать это диалоговое окно в фоновом режиме, поскольку его WindowModality установлен на ApplicationModal.
import sys from PyQt4.QtGui import * from PyQt4.QtCore import * def window(): app = QApplication(sys.argv) w = QWidget() b = QPushButton(w) b.setText("Hello World!") b.move(50,50) b.clicked.connect(showdialog) w.setWindowTitle("PyQt Dialog demo") w.show() sys.exit(app.exec_()) def showdialog(): d = QDialog() b1 = QPushButton("ok",d) b1.move(50,50) d.setWindowTitle("Dialog") d.setWindowModality(Qt.ApplicationModal) d.exec_() if __name__ == '__main__': window()
Приведенный выше код производит следующий вывод —
QMessageBox — это часто используемый модальный диалог для отображения некоторого информационного сообщения и, при желании, попросить пользователя ответить, нажав любую из стандартных кнопок на нем. Каждая стандартная кнопка имеет предопределенный заголовок, роль и возвращает предопределенное шестнадцатеричное число.
Важные методы и перечисления, связанные с классом QMessageBox, приведены в следующей таблице:
Sr.No. | Методы и описание |
---|---|
1 | SetIcon () Отображает предопределенный значок, соответствующий серьезности сообщения Вопрос Информация Предупреждение критический |
2 | SetText () Устанавливает текст основного сообщения для отображения |
3 | setInformativeText () Отображает дополнительную информацию |
4 | setDetailText () Диалог показывает кнопку Подробности. Этот текст появляется при нажатии на него |
5 | SetTitle () Отображает пользовательский заголовок диалога |
6 | setStandardButtons () Список стандартных кнопок для отображения. Каждая кнопка связана с QMessageBox.Ok 0x00000400 QMessageBox.Open 0x00002000 QMessageBox.Save 0x00000800 QMessageBox.Cancel 0x00400000 QMessageBox.Close 0x00200000 QMessageBox.Yes 0x00004000 QMessageBox.No 0x00010000 QMessageBox.Abort 0x00040000 QMessageBox.Retry 0x00080000 QMessageBox.Ignore 0x00100000 |
7 | setDefaultButton () Устанавливает кнопку по умолчанию. Выдает сигнал нажатия, если нажата Enter |
8 | setEscapeButton () Устанавливает кнопку, которая будет обрабатываться как нажатая, если нажата клавиша выхода |
SetIcon ()
Отображает предопределенный значок, соответствующий серьезности сообщения
Вопрос
Информация
Предупреждение
критический
SetText ()
Устанавливает текст основного сообщения для отображения
setInformativeText ()
Отображает дополнительную информацию
setDetailText ()
Диалог показывает кнопку Подробности. Этот текст появляется при нажатии на него
SetTitle ()
Отображает пользовательский заголовок диалога
setStandardButtons ()
Список стандартных кнопок для отображения. Каждая кнопка связана с
QMessageBox.Ok 0x00000400
QMessageBox.Open 0x00002000
QMessageBox.Save 0x00000800
QMessageBox.Cancel 0x00400000
QMessageBox.Close 0x00200000
QMessageBox.Yes 0x00004000
QMessageBox.No 0x00010000
QMessageBox.Abort 0x00040000
QMessageBox.Retry 0x00080000
QMessageBox.Ignore 0x00100000
setDefaultButton ()
Устанавливает кнопку по умолчанию. Выдает сигнал нажатия, если нажата Enter
setEscapeButton ()
Устанавливает кнопку, которая будет обрабатываться как нажатая, если нажата клавиша выхода
пример
В следующем примере нажмите сигнал кнопки в окне верхнего уровня, подключенная функция отобразит диалоговое окно сообщения.
msg = QMessageBox() msg.setIcon(QMessageBox.Information) msg.setText("This is a message box") msg.setInformativeText("This is additional information") msg.setWindowTitle("MessageBox demo") msg.setDetailedText("The details are as follows:")
Функция setStandardButton () отображает нужные кнопки.
msg.setStandardButtons(QMessageBox.Ok | QMessageBox.Cancel)
Сигнал buttonClicked () подключен к функции слота, которая идентифицирует заголовок источника сигнала.
msg.buttonClicked.connect(msgbtn)
Полный код для примера выглядит следующим образом:
import sys from PyQt4.QtGui import * from PyQt4.QtCore import * def window(): app = QApplication(sys.argv) w = QWidget() b = QPushButton(w) b.setText("Show message!") b.move(50,50) b.clicked.connect(showdialog) w.setWindowTitle("PyQt Dialog demo") w.show() sys.exit(app.exec_()) def showdialog(): msg = QMessageBox() msg.setIcon(QMessageBox.Information) msg.setText("This is a message box") msg.setInformativeText("This is additional information") msg.setWindowTitle("MessageBox demo") msg.setDetailedText("The details are as follows:") msg.setStandardButtons(QMessageBox.Ok | QMessageBox.Cancel) msg.buttonClicked.connect(msgbtn) retval = msg.exec_() print "value of pressed message box button:", retval def msgbtn(i): print "Button pressed is:",i.text() if __name__ == '__main__': window()
Приведенный выше код производит следующий вывод —
Типичное приложение с графическим интерфейсом может иметь несколько окон. Виджеты с вкладками и с накоплением позволяют активировать одно такое окно одновременно. Однако во многих случаях этот подход может оказаться бесполезным, поскольку вид других окон скрыт.
Один из способов одновременного отображения нескольких окон — это создать их как независимые окна. Это называется SDI (интерфейс с одним документом). Это требует больше ресурсов памяти, так как каждое окно может иметь свою собственную систему меню, панель инструментов и т. Д.
Приложения MDI (Multiple Document Interface) потребляют меньше ресурсов памяти. Подокна располагаются внутри основного контейнера относительно друг друга. Контейнерный виджет называется QMdiArea .
Виджет QMdiArea обычно занимает центральный виджет объекта QMainWondow. Дочерние окна в этой области являются экземплярами класса QMdiSubWindow. В качестве внутреннего виджета объекта subWindow можно установить любой QWidget. Подокна в области MDI могут быть расположены каскадно или мозаично.
В следующей таблице перечислены важные методы класса QMdiArea и класса QMdiSubWindow.
Sr.No. | Методы и описание |
---|---|
1 | addSubWindow () Добавляет виджет как новое подокно в области MDI |
2 | removeSubWindow () Удаляет виджет, который является внутренним виджетом подокна |
3 | setActiveSubWindow () Активирует подокно |
4 | cascadeSubWindows () Располагает подокна в MDiArea каскадным способом |
5 | tileSubWindows () Располагает подокна в MDiArea плиточным способом |
6 | closeActiveSubWindow () Закрывает активное подокно |
7 | subWindowList () Возвращает список подокон в MDI Area |
8 | setWidget () Устанавливает QWidget как внутренний виджет экземпляра QMdiSubwindow |
addSubWindow ()
Добавляет виджет как новое подокно в области MDI
removeSubWindow ()
Удаляет виджет, который является внутренним виджетом подокна
setActiveSubWindow ()
Активирует подокно
cascadeSubWindows ()
Располагает подокна в MDiArea каскадным способом
tileSubWindows ()
Располагает подокна в MDiArea плиточным способом
closeActiveSubWindow ()
Закрывает активное подокно
subWindowList ()
Возвращает список подокон в MDI Area
setWidget ()
Устанавливает QWidget как внутренний виджет экземпляра QMdiSubwindow
Объект QMdiArea испускает сигнал subWindowActivation (), тогда как сигнал windowStateChanged () испускается объектом QMdisubWindow.
пример
В следующем примере окно верхнего уровня, содержащее QMainWindow, имеет меню и MdiArea.
self.mdi = QMdiArea() self.setCentralWidget(self.mdi) bar = self.menuBar() file = bar.addMenu("File") file.addAction("New") file.addAction("cascade") file.addAction("Tiled")
Триггерный () сигнал меню связан с функцией windowaction ().
file.triggered[QAction].connect(self.windowaction)
Новое действие меню добавляет подокно в области MDI с заголовком, имеющим добавочный номер.
MainWindow.count = MainWindow.count+1 sub = QMdiSubWindow() sub.setWidget(QTextEdit()) sub.setWindowTitle("subwindow"+str(MainWindow.count)) self.mdi.addSubWindow(sub) sub.show()
Каскадные и мозаичные кнопки меню располагают отображаемые в данный момент подокна в каскадной и мозаичной форме соответственно.
Полный код выглядит следующим образом —
import sys from PyQt4.QtCore import * from PyQt4.QtGui import * class MainWindow(QMainWindow): count = 0 def __init__(self, parent = None): super(MainWindow, self).__init__(parent) self.mdi = QMdiArea() self.setCentralWidget(self.mdi) bar = self.menuBar() file = bar.addMenu("File") file.addAction("New") file.addAction("cascade") file.addAction("Tiled") file.triggered[QAction].connect(self.windowaction) self.setWindowTitle("MDI demo") def windowaction(self, q): print "triggered" if q.text() == "New": MainWindow.count = MainWindow.count+1 sub = QMdiSubWindow() sub.setWidget(QTextEdit()) sub.setWindowTitle("subwindow"+str(MainWindow.count)) self.mdi.addSubWindow(sub) sub.show() if q.text() == "cascade": self.mdi.cascadeSubWindows() if q.text() == "Tiled": self.mdi.tileSubWindows() def main(): app = QApplication(sys.argv) ex = MainWindow() ex.show() sys.exit(app.exec_()) if __name__ == '__main__': main()
Приведенный выше код производит следующий вывод —
Предоставление перетаскивания очень интуитивно понятно для пользователя. Он встречается во многих настольных приложениях, где пользователь может копировать или перемещать объекты из одного окна в другое.
Перетаскивание данных на основе MIME основано на классе QDrag. Объекты QMimeData связывают данные с соответствующим им типом MIME. Он сохраняется в буфере обмена, а затем используется в процессе перетаскивания.
Следующие функции класса QMimeData позволяют легко определять тип MIME и использовать его.
тестер | добытчик | Сеттер | MIME Типы |
---|---|---|---|
hasText () | текст() | SetText () | текст / обычный |
hasHtml () | HTML () | setHtml () | текст / html |
hasUrls () | URL () | setUrls () | текст / Ури список |
hasImage () | ImageData () | setImageData () | изображение / * |
hasColor () | colorData () | setColorData () | применение / х цветов |
Многие объекты QWidget поддерживают перетаскивание. Те, которые позволяют перетаскивать их данные, имеют setDragEnabled (), который должен быть установлен в true. С другой стороны, виджеты должны реагировать на события перетаскивания, чтобы сохранить перетаскиваемые в них данные.
DragEnterEvent предоставляет событие, которое отправляется целевому виджету при поступлении в него действия перетаскивания.
DragMoveEvent используется, когда выполняется действие перетаскивания.
DragLeaveEvent генерируется, когда действие перетаскивания покидает виджет.
DropEvent , с другой стороны, происходит, когда удаление завершено. Предлагаемое мероприятие действие может быть принято или отклонено условно.
DragEnterEvent предоставляет событие, которое отправляется целевому виджету при поступлении в него действия перетаскивания.
DragMoveEvent используется, когда выполняется действие перетаскивания.
DragLeaveEvent генерируется, когда действие перетаскивания покидает виджет.
DropEvent , с другой стороны, происходит, когда удаление завершено. Предлагаемое мероприятие действие может быть принято или отклонено условно.
пример
В следующем коде DragEnterEvent проверяет, содержат ли данные MIME события событие. Если да, предлагаемое действие события принимается, и текст добавляется как новый элемент в ComboBox.
import sys from PyQt4.QtGui import * from PyQt4.QtCore import * class combo(QComboBox): def __init__(self, title, parent): super(combo, self).__init__( parent) self.setAcceptDrops(True) def dragEnterEvent(self, e): print e if e.mimeData().hasText(): e.accept() else: e.ignore() def dropEvent(self, e): self.addItem(e.mimeData().text()) class Example(QWidget): def __init__(self): super(Example, self).__init__() self.initUI() def initUI(self): lo = QFormLayout() lo.addRow(QLabel("Type some text in textbox and drag it into combo box")) edit = QLineEdit() edit.setDragEnabled(True) com = combo("Button", self) lo.addRow(edit,com) self.setLayout(lo) self.setWindowTitle('Simple drag & drop') def main(): app = QApplication(sys.argv) ex = Example() ex.show() app.exec_() if __name__ == '__main__': main()
Приведенный выше код производит следующий вывод —
PyQt API содержит сложную систему классов для связи со многими базами данных на основе SQL. Его QSqlDatabase обеспечивает доступ через объект Connection. Ниже приведен список доступных в настоящее время драйверов SQL —
Sr.No. | Тип и описание драйвера |
---|---|
1 | QDB2 IBM DB2 |
2 | QIBASE Borland InterBase Driver |
3 | QMYSQL MySQL Driver |
4 | QOCI Драйвер интерфейса вызова Oracle |
5 | QODBC Драйвер ODBC (включает Microsoft SQL Server) |
6 | QPSQL PostgreSQL драйвер |
7 | QSQLITE SQLite версии 3 или выше |
8 | QSQLITE2 SQLite версия 2 |
QDB2
IBM DB2
QIBASE
Borland InterBase Driver
QMYSQL
MySQL Driver
QOCI
Драйвер интерфейса вызова Oracle
QODBC
Драйвер ODBC (включает Microsoft SQL Server)
QPSQL
PostgreSQL драйвер
QSQLITE
SQLite версии 3 или выше
QSQLITE2
SQLite версия 2
пример
Соединение с базой данных SQLite устанавливается статическим методом —
db = QtSql.QSqlDatabase.addDatabase('QSQLITE') db.setDatabaseName('sports.db')
Другие методы класса QSqlDatabase следующие:
Sr.No. | Методы и описание |
---|---|
1 | setDatabaseName () Устанавливает имя базы данных, с которой ищется соединение |
2 | setHostName () Устанавливает имя хоста, на котором установлена база данных |
3 | setUserName () Определяет имя пользователя для подключения |
4 | Установка пароля() Устанавливает пароль объекта подключения, если таковой имеется |
5 | совершить () Подтверждает транзакции и возвращает true в случае успеха |
6 | откат () Откат транзакции базы данных |
7 | близко() Закрывает связь |
setDatabaseName ()
Устанавливает имя базы данных, с которой ищется соединение
setHostName ()
Устанавливает имя хоста, на котором установлена база данных
setUserName ()
Опреде
pyqt5 — Начало работы с pyqt5
замечания
В этом разделе приведен обзор того, что такое pyqt5, и почему разработчик может захотеть его использовать.
Следует также упомянуть о любых крупных предметах в pyqt5 и ссылаться на связанные темы. Поскольку документация для pyqt5 является новой, вам может потребоваться создать начальные версии этих связанных тем.
Добавление значка приложения
import sys
from PyQt5.QtWidgets import QApplication, QWidget
from PyQt5.QtGui import QIcon
class Example(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setGeometry(300, 300, 300, 220)
self.setWindowTitle('Icon')
self.setWindowIcon(QIcon('web.png'))
self.show()
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
Анализ
Аргументы функции в Python
В Python пользовательские функции могут принимать четыре разных типа аргументов.
- Аргументы по умолчанию:
Определение функции
def defaultArg( name, msg = "Hello!"):
Вызов функции
defaultArg( name)
- Необходимые аргументы:
Определение функции
def requiredArg (str,num):
Вызов функции:
requiredArg ("Hello",12)
- Аргументы ключевого слова:
Определение функции
def keywordArg( name, role ):
Вызов функции
keywordArg( name = "Tom", role = "Manager")
или же
keywordArg( role = "Manager", name = "Tom")
- Переменная количество аргументов:
Определение функции
def varlengthArgs(*varargs):
Вызов функции
varlengthArgs(30,40,50,60)
class Example(QWidget):
def __init__(self):
super().__init__()
...
Три важные вещи в объектно-ориентированном программировании — это классы, данные и методы. Здесь мы создаем новый класс под названием Example
. Класс Example
наследуется от класса QWidget
. Это означает, что мы вызываем два конструктора: первый для класса Example
и второй для унаследованного класса. Метод super()
возвращает родительский объект класса Example
и мы вызываем его конструктор. Переменная self
относится к самому объекту.
Почему мы использовали __init__
?
Проверь это:
class A(object):
def __init__(self):
self.lst = []
class B(object):
lst = []
и теперь попробуйте:
>>> x = B()
>>> y = B()
>>> x.lst.append(1)
>>> y.lst.append(2)
>>> x.lst
[1, 2]
>>> x.lst is y.lst
True
и это:
>>> x = A()
>>> y = A()
>>> x.lst.append(1)
>>> y.lst.append(2)
>>> x.lst
[1]
>>> x.lst is y.lst
False
Означает ли это, что x в классе B устанавливается до создания экземпляра?
Да, это атрибут класса (он делится между экземплярами). Хотя в классе A это атрибут экземпляра.
self.initUI()
Создание GUI делегируется initUI()
.
self.setGeometry(300, 300, 300, 220)
self.setWindowTitle('Icon')
self.setWindowIcon(QIcon('web.png'))
Все три метода были унаследованы от класса QWidget
. setGeometry()
выполняет две функции: находит окно на экране и задает его размер. Первыми двумя параметрами являются положения x и y окна. Третья — ширина, а четвертая — высота окна. Фактически, он объединяет методы resize()
и move()
одним способом. Последний метод устанавливает значок приложения. Для этого мы создали объект QIcon
. QIcon
получает путь к нашему значку, который будет отображаться.
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
Создаются объекты приложения и примера. Запускается основной цикл.
Привет, мир
В этом примере создается простое окно с кнопкой и редактирование строки в макете. Он также показывает, как подключить сигнал к слоту, так что нажатие кнопки добавляет текст в редактирование строки.
import sys
from PyQt5.QtWidgets import QApplication, QWidget
if __name__ == '__main__':
app = QApplication(sys.argv)
w = QWidget()
w.resize(250, 150)
w.move(300, 300)
w.setWindowTitle('Hello World')
w.show()
sys.exit(app.exec_())
Анализ
app = QtWidgets.QApplication(sys.argv)
Каждое приложение PyQt5 должно создать объект приложения. Параметр sys.argv представляет собой список аргументов из командной строки. Сценарии Python можно запускать из оболочки.
w = QWidget()
Виджет QWidget
является базовым классом всех объектов пользовательского интерфейса в PyQt5. Мы предоставляем конструктор по умолчанию для QWidget
. Конструктор по умолчанию не имеет родителя. Виджет без родителя называется окном.
w.resize(250, 150)
Метод resize()
изменяет resize()
виджета. Он имеет ширину 250 пикселей и высоту 150 пикселей.
w.move(300, 300)
Метод move()
перемещает виджет в положение на экране при x = 300, y = 300 координат.
w.setWindowTitle('Hello World')
Здесь мы устанавливаем заголовок для нашего окна. Заголовок отображается в заголовке.
w.show()
Метод show()
отображает виджет на экране. Виджет сначала создается в памяти, а затем отображается на экране.
sys.exit(app.exec_())
Наконец, мы вводим mainloop приложения. Обработка событий начинается с этого момента. Mainloop принимает события из оконной системы и отправляет их в виджеты приложения. Mainloop заканчивается, если мы вызываем метод exit()
или главный виджет уничтожается. Метод sys.exit()
обеспечивает чистый выход. Окружающая среда будет проинформирована о том, как приложение закончилось.
Метод exec_()
имеет знак подчеркивания. Это потому, что exec является ключевым словом Python. И, таким образом, вместо этого использовался exec_()
.
Установка или настройка
- Установите Anaconda (встроенный PyQt5), особенно для пользователей Windows.
- Интегрируйте QtDesigner и QtUIConvert в PyCharm (внешние инструменты)
- Откройте
Settings
PyCharm>Tools
>External Tools
- Создать инструмент (QtDesigner) — используется для редактирования файлов * .ui
- Create Tool (PyUIConv) — используется для преобразования * .ui в * .py
- Откройте
- Написать демо
- new window.ui с помощью внешнего инструмента (QtDesigner)
- конвертировать в window.py с помощью внешнего инструмента (PyUIConv)
- демонстрация
import sys from PyQt5.QtWidgets import QApplication,QMainWindow from window import Ui_MainWindow if __name__ == '__main__': app = QApplication(sys.argv) w = QMainWindow() ui = Ui_MainWindow() ui.setupUi(w) w.show() sys.exit(app.exec_())
Пакет вашего проекта в excutable / installer
cx_Freeze — инструмент может упаковать ваш проект в excutable / installer
- после установки его на pip, чтобы упаковать
demo.py
, нам нужноsetup.py
ниже.
import sys
from cx_Freeze import setup, Executable
# Dependencies are automatically detected, but it might need fine tuning.
build_exe_options = {
"excludes": ["tkinter"],
"include_files":[('./platforms','./platforms')] # need qwindows.dll for qt5 application
}
# GUI applications require a different base on Windows (the default is for a
# console application).
base = None
if sys.platform == "win32":
base = "Win32GUI"
setup( name = "demo",
version = "0.1",
description = "demo",
options = {"build_exe": build_exe_options},
executables = [Executable("demo.py", base=base)])
- затем построить
python .\setup.py build
python .\setup.py bdist_msi
Отображение всплывающей подсказки
import sys
from PyQt5.QtWidgets import (QWidget, QToolTip,
QPushButton, QApplication)
from PyQt5.QtGui import QFont
class Example(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
QToolTip.setFont(QFont('SansSerif', 10))
self.setToolTip('This is a <b>QWidget</b> widget')
btn = QPushButton('Button', self)
btn.setToolTip('This is a <b>QPushButton</b> widget')
btn.resize(btn.sizeHint())
btn.move(50, 50)
self.setGeometry(300, 300, 300, 200)
self.setWindowTitle('Tooltips')
self.show()
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
Анализ
QToolTip.setFont(QFont('SansSerif', 10))
Этот статический метод устанавливает шрифт, используемый для визуализации всплывающих подсказок. Мы используем шрифт SansSerif размером 10 пикселей.
self.setToolTip('This is a <b>QWidget</b> widget')
Чтобы создать всплывающую подсказку, мы вызываем метод setTooltip()
. Мы можем использовать форматирование форматированного текста.
btn = QPushButton('Button', self)
btn.setToolTip('This is a <b>QPushButton</b> widget')
Мы создаем виджет кнопки и устанавливаем для него всплывающую подсказку.
btn.resize(btn.sizeHint())
btn.move(50, 50)
Кнопка изменяется и перемещается в окне. Метод sizeHint()
дает рекомендуемый размер для кнопки.
Python | PyCharm
PyCharm
Последнее обновление: 06.11.2020
В прошлой теме было описано создание простейшего скрипта на языке Python. Для создания скрипта использовался текстовый редактор. В моем случае это был
Notepad++. Но есть и другой способ создания программ, который представляет использование различных интегрированных сред разработки или IDE.
IDE предоставляют нам текстовый редактор для набора кода, но в отличие от стандартных текстовых редакторов, IDE также обеспечивает
полноценную подсветку синтаксиса, автодополнение или интеллектуальную подсказку кода, возможность тут же выполнить созданный скрипт, а также многое другое.
Для Python можно использовать различные среды разработки, но одной из самых популярных из них является среда PyCharm, созданная
компанией JetBrains. Эта среда динамично развивается, постоянно обновляется и доступна для наиболее распространенных операционных систем — Windows, MacOS, Linux.
Правда, она имеет одно важное ограничение. А именно она доступна в двух основных вариантах: платный выпуск Professional и бесплатный Community.
Многие базовые возможности доступны и в бесплатном выпуске Community. В то же время ряд возможностей, например, веб-разработка, доступны только в платном Professional.
В нашем случае воспользуемся бесплатным выпуском Community. Для этого перейдем на
страницу загрузки и загрузим установочный файл PyCharm Community.
После загрузки выполним его установку.
После завершения установки запустим программу. При первом запуске открывается начальное окно:
Создадим проект и для этого выберем пункт Create New Project.
Далее нам откроется окно для настройки проекта. В поле Location необходимо указать путь к проекту. В моем случае проект будет помещаться в папку HelloApp. Собственно название папки и будет названием проекта.
Следует отметить, что PyCharm позволяет разграничить настройки проектов. Так, по умолчанию выбрано поле New Environment Using, что позволяет установить
версию интерпретатора для конкретного проекта. Затем все устанавливаемые дополнительные пакеты будут касаться только текущего проекта. Это удобно, если мы создаем несколько проектов, но каждый из которых рабоает с какой-то специфической версией
интерпретатора. Но в качестве альтернативы мы также можем выбрать поле Existing Interpreter и задать путь к файлу интерпретатора глобально для всех проектов.
В реальности для первого простейшего приложения на PyCharm не имеет значения, как будет установлен интерпертатор. Однако данном же случае
оставим выбранный по умолчанию флажок New Environment Using и под ним в поле Base Interpreter укажем путь к файлу интерпретатора, установка которого рассматривалась в первой теме.
Последняя опция Create a main.py welcome script позволяет сразу при создании проекта добавить в него файл main.py.
И после установки всех путей нажмем на кнопку Create для создания проекта.
После этого будет создан пустой проект:
В центре среды будет открыт файл main.py с некоторым содержимым по умолчанию.
Теперь создадим простейшую программу. Для этого изменим код файла main.py следующим образом:
name = input("Введите ваше имя: ") print("Привет,", name)
Для запуска скрипта нажмем на зеленую стрелку в панели инструментов программы:
Также для запуска можно перейти в меню Run и там нажать на подпункт Run ‘main’)
После этого внизу IDE отобразится окно вывода, где надо будет ввести имя и где после этого будет выведено приветствие:
GUI в Python. Коротко о PyQT5
Время прочтения: 4 мин.
PyQt – один из самых распространённых инструментариев для создания графического интерфейса пользователя (GUI) на языке Python. В данной статье рассмотрим несколько его возможностей, которых с лихвой хватит для покрытия большинства задач, с которыми мы сталкиваемся каждый день.
Весь код графического интерфейса можно писать самостоятельно с нуля. А можно воспользоваться конструктором Qt Designer, который входит в состав Anaconda (в более старых версия его можно установить через pip install). В этом конструкторе можно собрать все необходимые элементы в одном или нескольких окнах, как того требует функциональность или личные предпочтения.
Итак, предположим, что перед нами стоит задача написать программу с GUI, которая будет разбивать один исходный файл с данными по разным городам на несколько конечных файлов, содержащих данные по каждому городу отдельно. В Qt Designer соберём вот такую конструкцию:
На основной форме (QWidget) мы разместили следующие элементы:
- QLineEdit под именем lineEdit. В нём будет отображено расположение выбранного файла.
- QToolButton под именем toolButton. Эта кнопка (…) будет вызывать окно для выбора файла с исходными данными.
- Три кнопки QPushButton (pushButton, pushButton_2, pushButton_3) для запуска процесса разбиения (Ок), закрытия окна (Закрыть) и предварительного чтения файла (Прочитать файл) соответственно.
- QCheckBox под именем checkBox. Этот элемент (Только выбранные) позволит ограничить итоговый набор файлов по выбранным условиям.
- QListWidget под именем listWidget. Здесь будет отображаться список городов, которые присутствуют в исходном файле. И здесь же можно будет выбрать только те города, по которым мы хотим получить данные. В свойстве selectionMode этого объекта выбираем MultiSelection.
Когда наш макет готов, сохраняем его. На этом этапе у нас есть файл sample.ui, содержащий информацию в формате XML. Конвертируем в привычный python-код командой
pyuic5 sample.ui –o sample.py
в командной строке. Получаем следующий код:
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_Form(object):
def setupUi(self, Form):
Form.setObjectName("Form")
Form.resize(464, 230)
self.pushButton = QtWidgets.QPushButton(Form)
self.pushButton.setGeometry(QtCore.QRect(10, 180, 75, 23))
self.pushButton.setObjectName("pushButton")
self.lineEdit = QtWidgets.QLineEdit(Form)
self.lineEdit.setGeometry(QtCore.QRect(9, 9, 133, 20))
self.lineEdit.setObjectName("lineEdit")
self.toolButton = QtWidgets.QToolButton(Form)
self.toolButton.setGeometry(QtCore.QRect(140, 8, 22, 22))
self.toolButton.setObjectName("toolButton")
self.pushButton_2 = QtWidgets.QPushButton(Form)
self.pushButton_2.setGeometry(QtCore.QRect(90, 180, 75, 23))
self.pushButton_2.setObjectName("pushButton_2")
self.checkBox = QtWidgets.QCheckBox(Form)
self.checkBox.setGeometry(QtCore.QRect(10, 140, 141, 21))
self.checkBox.setObjectName("checkBox")
self.pushButton_3 = QtWidgets.QPushButton(Form)
self.pushButton_3.setGeometry(QtCore.QRect(10, 50, 133, 23))
self.pushButton_3.setObjectName("pushButton_3")
self.listWidget = QtWidgets.QListWidget(Form)
self.listWidget.setGeometry(QtCore.QRect(190, 9, 256, 192))
self.listWidget.setSelectionMode(QtWidgets.QAbstractItemView.MultiSelection)
self.listWidget.setObjectName("listWidget")
self.retranslateUi(Form)
QtCore.QMetaObject.connectSlotsByName(Form)
def retranslateUi(self, Form):
_translate = QtCore.QCoreApplication.translate
Form.setWindowTitle(_translate("Form", "Form"))
self.pushButton.setText(_translate("Form", "Ok"))
self.toolButton.setText(_translate("Form", "..."))
self.pushButton_2.setText(_translate("Form", "Закрыть"))
self.checkBox.setText(_translate("Form", "Только выбранные"))
self.pushButton_3.setText(_translate("Form", "Прочитать файл"))
self.listWidget.setSortingEnabled(False)
Приступим к написанию кода основной программы. Нам потребуются дополнительные библиотеки:
import sys
import pandas as pd
from PyQt5.QtWidgets import QFileDialog
Следующие функции необходимо размещать в классе Ui_Form. Для выбора файла напишем функцию с QFileDialog.getOpenFileName():
def open_dialog_box(self):
filename = QFileDialog.getOpenFileName()
self.path = filename[0]
self.lineEdit.setText(self.path)
Читаем выбранный файл и заполняем наш listWidget:
def readfile(self):
self.df = pd.read_excel(self.path)
self.uniqueCity = self.df["city"].unique()
self.listWidget.clear()
for item in self.uniqueCity:
self.listWidget.addItem(item)
Не забудем про выход из программы:
def quit(self):
sys.exit()
В следующей функции проверяется, отмечена ли опция «Только выбранные». Если да, то будут созданы только файлы по выбранным в окне listWidget городам. Если нет, то будут созданы файлы по всем города, которые имеются в исходном файле.
def job(self):
if self.checkBox.checkState() == 2:
for city in self.listWidget.selectedItems():
self.df[self.df['city']==city.text()].to_excel(f"excel_{city.text()}.xlsx", index=None)
else:
for city in self.uniqueCity:
self.df[self.df['city']==city].to_excel(f"excel_{city}.xlsx", index=None)
Теперь свяжем написанные функции с элементами на форме, а также создадим два датафрейма, которые используются в функциях выше. Этот код необходимо дописать в функцию setupUi:
self.toolButton.clicked.connect(self.open_dialog_box)
self.pushButton_3.clicked.connect(self.readfile)
self.pushButton.clicked.connect(self.job)
self.pushButton_2.clicked.connect(self.quit)
self.uniqueCity = pd.DataFrame()
self.df = pd.DataFrame()
Осталось только написать код для запуска нашей программы:
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
Form = QtWidgets.QMainWindow()
ui = Ui_Form()
ui.setupUi(Form)
Form.show()
sys.exit(app.exec_())
Готово. Запускаем программу, выбираем файл, читаем его, ставим при необходимости отметку «Только выбранные», отмечаем нужные нам города, кликаем «Ок» и получаем отчеты в разрезе городов.
Мы описали лишь небольшую часть инструментов библиотеки PyQt, но большинство остальных программируется аналогичным способом. Теперь вашей программой могут пользоваться другие коллеги без необходимости разбираться в коде для ввода своих данных.
Python3 + Pycharm + PyQt5 из списка — 的 的 麦田 — 园
搭建 环境 :
操作系统 : Win10 64-битная
Python версии 3.7
Pycharm : 社区 免费 Version
一 、 Python3.7 安装
下载 链接 : 官 网 https://www.python.org/downloads/windows/ 或 腾讯 软件 中心 下载 https://pc.qq.com/detail/5/detail_24685.html 或 其他 站点 下载。 的 是python-3.7.0-amd64。
到 安装 包 后 打开 , 想 默认 路径 (C 盘) 的 话 一直 点 下一步 就 可以 了 , 或者 定义 分区 , 我 D 盘 D: \ Python37 下。 安装 时 选择加入 环境 变量 , 这样 就 不需要 人工 设置。
后 在 命令 行 输入 питон 如果 能 进入 питон 交互式 界面 就 意味着 安装 成功 了。
pycharm 包 下载:
http: // www.jetbrains.com/pycharm/download/#section=windows
Версия pycharm-community-2019.1.1 Версия
下载 后 双击 打开 , 默认 安装 即可 , 此处 略。
安装 完成 后 打开 , 点击 «Создать новый проект» 新建 一个 项目。
Location 项目 路径 , 选择 已经 存在 的 Python 解释 器。
选择 系统 解释 器。
新建 的 项目 :
设置 界面 (快捷 键 Ctrl + Alt + S) , 点击 项目 的 项目 解释 器 , 的 + 号 安装 PyQt5 ,
如果 安装 失败 , 选择 另 一种 方法 安装 , 即 在 命令 行 pip 安装
行 , pip list 命令 列出 当前 已经 安装 的 第三方 Python 包 , pip install 安装 第三方 包。
完后 , 重新 进入 界面 可以 看到 已经 安装 的 PyQt5 000 000
— это инструменты pyqt5-tools для QtDesigner и
.
安装 好的 PyQt5 环境 配置 到 Pycharm 中。
设置 界面 进入 工具 — 工具 , 点 + 号 , 依次 配置 QtDisigner (设计师) , PyUIC (用于 将 设计师 的 UI 自动 转换 成 Python 代码) , PyRCC。
Программа designer 文件 的 路径 , 我 的 安装 路径 是 D: \ Python37 \ Lib \ site-packages \ pyqt5_tools \ designer.exe
WorkDir 是 $ FileDir $
PyUIC 时 , Program 是 python 解释 器 的 路径 , Arguments 这里 输入 -m PyQt5.uic.pyuic $ FileName $ -o $ FileNameWithoutExtension $ .py
设置 RCC 时 , Аргументы 输入 $ FileName $ -o $ FileNameWithoutExtension $ _rc.py
Программа pyrcc5.exe 的 路径 , 我 的 路径 是 D: \ Python37 \ Scripts \ pyrcc5.exe
设置 完后 是 这样 的 :
, 在 Pycharm 的 菜单 栏中 的 Tools-External tools 可以 看到 新增 的 外部 工具。
测试 一下 新 搭 的 环境。
-External Tools-QtDesigner позволяет создавать файлы
.
, 保存 默认 的 界面 , 这里 的 界面 文件 名 QtTest.ui
保存 后 可以 在 项目 目录 下 看到 已经 生成 了 UI 文件。
右键 点 QtTest.ui — Внешние инструменты — PyUIC , 会 自动 把 UI 文件 生成 python 代码 QtTest.py , 双击 可 打开 查看 代码 , 这里 测试 所以 不用 修改 这个 文件。
点 项目 , 新建 一个 Python 文件 , 输入 以下 main 程序 代码 , 然后 运行。
import sys импортировать QtTest из PyQt5.QtWidgets импортировать QApplication, QDialog если __name__ == '__main__': myapp = QApplication (sys.argv) myDlg = QDialog () myUI = QtTest.Ui_Dialog () myUI.setupUi (myDlg) myDlg.show () sys.выход (myapp.exec_ ())
弹出 这样 的 对话框 则 Pycharm 的 配置 已经 完成 且 正确。
Python3 + Pycharm + PyQt5ͼ_python_ű ֮
ϵͳПобеда 10 64бит
Python 汾 3,7
PycharmѰ
һPython3.7 װ
ӣ https://www.python.org/downloads/windows/https: //pc.qq.com/detail/5/detail_24685.html վ ءص python-3.7.0-amd64
װ 밲 װ Ĭ · C̣Ļһ ֱ һͿˣ Զ 尲 İ װ DD: \ Python37¡ װʱ ѡ 뻷 ͲҪ˹á
װ питон ܽ питонʽζŰ װɹˡ
pycharm װ:
http: // www.jetbrains.com/pycharm/download/
ص pycharm-community-2019.1.1 汾
غ˫ Ĭϰ װɣ˴ ԡ
װɺ Создать новый проект ½һĿ
МестоположениеĿ · ѡѾ ڵ Python
ѡϵͳ
½Ŀ
ý 棨 ݼ Ctrl + Alt + SĿĿұ ߵ + Ű װ PyQt5
װʧ ܣ ѡһ ַװ пункт װ
listpip listǰѾ װ ĵPythonpip install װ
½ ý Կ Ѿ װ PyQt5 汾
— инструменты pyqt5 — инструменты QtDesigner — элементы
Ѱ װ õPyQt5õPycharmС
ý 빤 -ⲿ ߣ + ţQtDisignerʦPyUIC ڽʦ UI Զ ת Python 룩 PyRCC
Programdesigner · İ װ · D: \ Python37 \ Lib \ site-packages \ pyqt5_tools \ designer.exe
WorkDir $ FileDir $
PyUICʱProgrampython · Аргументы -m PyQt5.uic.pyuic $ FileName $ -o $ FileNameWithoutExtension $ .py
RCCʱArguments $ FileName $ -o $ FileNameWithoutExtension $ _rc.py
Programpyrcc5.exe · · D: \ Python37 \ Scripts \ pyrcc5.exe
ģ
ʱPycharmIJ˵еTools-Внешние инструменты Կ ⲿ ߡ
´Ļ
ҼĿ-Внешние инструменты-QtDesigner ߵ˵ ϵИнструментыҲԣQtDesignerĽ 棬 ѡһģԡѡһťĶ Ի Создать
ôøģ ֱ ӱĬϵĽ 棬 ĽļQtTest.ui
ĿĿ¼¿ѾUIļ
ҼQtTest.ui — Внешние инструменты — PyUIC Զ UIļpythonQtTest.py˫ɴ鿴 룬 Բ ļ
ҼĿ½һPythonļmain 룬 ȻС
import sys импортировать QtTest из PyQt5.QtWidgets импортировать QApplication, QDialog если __name__ == '__main__': myapp = QApplication (sys.argv) myDlg = QDialog () myUI = QtTest.Ui_Dialog () myUI.setupUi (myDlg) myDlg.show () sys.exit (myapp.exec_ ())
Ե Ķ Ի˵ PycharmѾȷ
ܽ
С ܵ Python3 + Pycharm + PyQt5ͼ, Դ κԣСἰʱ ظ ҵġ ڴ ҲdzлҶ Խ ű ֮ վ ֧֣
ñĶаӭ ת أ ע лл
Cython с сообществом PyCharm
Некоторое время назад я объяснил, как использовать покрытие и pylint с сообществом PyCharm.Cython также распространяется на PyCharm professional, но не на версию сообщества, что делает работу с Cython немного неудобной.
Вот как мне это удалось.
Подсветка синтаксиса
файлов cython заканчиваются на .pyx . Синтаксис похож на Python, но программа не распознает файл. Кроме того, в нем есть некоторые специальные слова, которые могут вызывать ошибку в Python, например cdef . Поэтому необходимо создать новый тип файла. Перейдите в Файл-> Настройки-> Редактор-> Типы файлов и добавьте тип файла:
Затем отредактируйте его, чтобы он соответствовал синтаксису cython:
Поскольку нужно добавить много слов и нет возможности сделать это быстро, я экспортировал свои настройки в этот файл, который вы можете импортировать из Файл-> Параметры импорта .Я постараюсь обновлять его, добавляя больше ключевых слов.
Компиляция файла cython
Как объясняется в официальном руководстве по базовому программированию Cython, лучший способ скомпилировать файлы — это создать файл setup.py с параметрами компиляции:
из настройки импорта distutils.core
из Cython.Build import cythonize
настроить(
ext_modules = cythonize ("helloworld.pyx")
)
Затем компиляция выполняется путем запуска:
настройка Python.py build_ext --inplace
Можно автоматизировать это с помощью внешнего инструмента :
Откройте Файл-> Настройки-> Инструменты-> Внешние инструменты и нажмите кнопку + . Вы получите окно, которое необходимо заполнить следующим образом:
Вы можете запустить компиляцию, перейдя в tools-> External tools-> cython compile в любой момент или щелкнув правой кнопкой мыши имя файла на панели проекта. Затем повторно запустите его, нажав кнопку воспроизведения на нижней панели.
Обычно все файлы cython компилируются сразу с помощью setup.py , поэтому нет необходимости создавать специальные конфигурации в зависимости от файла.