Это часть руководства по PyQt5, в котором рассматриваются некоторые основы.
связанные с PyQt5
PyQt5 — это набор клея из среды приложений Digia Qt5 и Python. Поддерживаются версии Python2.x и Python3.x. В этом руководстве используется Python 3. Библиотека Qt — одна из самых мощных библиотек поддержки графического интерфейса. Официальная домашняя страница PyQt5:www.riverbankcomputing.co.uk/news. Компания Riverbank Computing разработала PyQt5.
PyQt5 реализует функциональность в виде набора модулей Python. Он содержит более 620 классов, 600 методов и функций. Это многоплатформенный набор инструментов, который работает на всех основных операционных системах, включая Unix, Windows и Mac OS. PyQt5 использует двойную модель лицензирования. Разработчики могут выбирать между лицензиями GPL и лицензиями сообщества.
простой пример
Вот простой пример, показывающий маленькое окно. Мы можем сделать многие из этих окон. Мы можем изменить размер его окна, развернуть или свернуть это окно. Эти требования требуют много кодирования. Но некоторые люди уже написали реализацию этих функций. Поскольку эти требования повторяются во многих приложениях, здесь нет необходимости переписывать код. PyQt5 — это расширенный набор инструментов, который инкапсулирует для нас код реализации многих сложных функций, и мы можем легче реализовать эти функции с помощью функций. Если бы мы писали код в низкоуровневом наборе инструментов, код в приведенном ниже примере, вероятно, занял бы сотни строк для реализации.
#!/usr/bin/python3
# -*- coding: utf-8 -*-
"""
ZetCode PyQt5 教程
在这个例子中, 我们用PyQt5创建了一个简单的窗口。
作者: Jan Bodnar
网站: zetcode.com
最后一次编辑: January 2015
"""
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('Simple')
w.show()
sys.exit(app.exec_())
Приведенный выше пример кода отобразит на экране небольшое окно.
import sys
from PyQt5.QtWidgets import QApplication, QWidget
Здесь мы импортируем некоторые необходимые модули. Самый простой компонент виджета находится в модуле PyQt5.QtWidget.
app = QApplication(sys.argv)
Все приложения PyQt5 должны создавать объект Application. Аргумент sys.argv представляет собой список аргументов из командной строки. Скрипты Python можно запускать в оболочке. Это метод, который мы используем для управления запуском нашего приложения.
w = QWidget()
Компонент Qwidget является базовым классом для всех классов пользовательского интерфейса в PyQt5. Мы предоставляем конструктор по умолчанию для QWidget. Конструктор по умолчанию не имеет родительского класса. Компонент виджета без родительского класса будет использоваться как окно.
w.resize(``250``, ``150``)
Метод resize() изменяет размер компонента виджета. Теперь он имеет ширину 250 пикселей и высоту 150 пикселей.
w.move(``300``, ``300``)
Метод move() перемещает компонент виджета в позицию с координатами x=300, y=300 на экране.
w.setWindowTitle(``'Simple'``)
Здесь мы устанавливаем заголовок нашего окна. Этот заголовок отображается в строке заголовка.
w.show()
Метод show() отображает виджет на экране. Здесь объект виджета сначала создается в памяти, а затем отображается на экране.
sys.exit(app.exec_())
Наконец, приложение входит в основной цикл. В этот момент начинается обработка события. Основной цикл используется для получения событий, инициированных окном, и пересылки их в приложение виджета для обработки. Если мы вызовем метод exit() или основной виджет будет уничтожен, основной цикл завершится. Метод sys.exit() обеспечивает выход без мусора. Системная среда будет уведомлена о завершении работы приложения.
Метод exec_() имеет подчеркивание. Потому что exec — зарезервированное ключевое слово Python. Поэтому вместо этого используйте exec_().
Простая иконка приложения
Значок приложения — это небольшое изображение, которое обычно появляется в верхнем левом углу строки заголовка. В следующем примере мы покажем, как мы можем отобразить значок приложения в PyQt5. Мы также представим использование некоторых новых методов.
#!/usr/bin/python3
# -*- coding: utf-8 -*-
"""
ZetCode PyQt5 tutorial
This example shows an icon
in the titlebar of the window.
author: Jan Bodnar
website: zetcode.com
last edited: January 2015
"""
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 предоставляет процедурный и объектно-ориентированный стили кодирования. Программирование PyQt5 означает объектно-ориентированное программирование.
class Example(QWidget):
def __init__(self):
super().__init__()
...
В объектно-ориентированном программировании есть три важные вещи: классы, данные и методы. Здесь мы создаем новый класс с именем Example. Класс Example наследуется от класса QWidget. Это означает, что мы вызываем два конструктора: первый — конструктор класса Example, а второй — конструктор унаследованного класса. Метод super() возвращает объект родительского класса класса Example, и мы вызываем конструктор родительского класса. Метод __init__() — это конструктор на языке Python.
self``.initUI()
Создание графического интерфейса предоставляется методу initUI() для завершения.
self``.setGeometry(``300``, ``300``, ``300``, ``220``)
self``.setWindowTitle(``'Icon'``)
self``.setWindowIcon(QIcon(``'web.png'``))
Все три метода унаследованы от класса QWidgets. setGeometry() делает две вещи: помещает окно на экран и устанавливает его размеры. Первые два параметра метода setGeometry() определяют положение окна по осям x и y. Третий параметр определяет ширину окна, а четвертый параметр определяет высоту окна. По сути, это комбинация методов resize() и move() в одном методе. Для этого примера мы создаем объект QIcon. Объект QIcon получает в качестве параметра путь к изображению, которое мы хотим отобразить.
if
__name__ ``=``=
'__main__'``:
``
```app ``=
QApplication(sys.argv)`
```ex ``=
Example()`
```sys.exit(app.exec_())`
Создаются объекты приложений и примеров. Запускается основной цикл.
отображать текст подсказки
Мы можем предоставить всплывающие подсказки для любого из наших компонентов виджета.
#!/usr/bin/python3
# -*- coding: utf-8 -*-
"""
ZetCode PyQt5 tutorial
This example shows a tooltip on
a window and a button.
author: Jan Bodnar
website: zetcode.com
last edited: January 2015
"""
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_())
В этом примере мы показываем всплывающие подсказки для двух компонентов PyQt5.
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``)
Это изменяет размер кнопки и перемещает ее положение в окне. Метод setHint() дает кнопке рекомендуемый размер.
закрыть окно
Очевидный способ закрыть окно — щелкнуть значок X в строке заголовка. В следующем примере мы покажем, как программно закрыть наше окно. Мы кратко коснемся механизма сигнала и слота.
QPushButton(string text, QWidget parent ``=
None``)
Текстовый параметр — это содержимое, которое будет отображаться на кнопке. Родительский параметр — это компонент, на котором размещается наша кнопка. В нашем случае это будет компонент QWidget. Компоненты приложения имеют иерархическую структуру. В этой иерархии у большинства компонентов есть родительские классы. Компонент без родителя является окном верхнего уровня.
#!/usr/bin/python3
# -*- coding: utf-8 -*-
"""
ZetCode PyQt5 tutorial
This program creates a quit
button. When we press the button,
the application terminates.
author: Jan Bodnar
website: zetcode.com
last edited: January 2015
"""
import sys
from PyQt5.QtWidgets import QWidget, QPushButton, QApplication
from PyQt5.QtCore import QCoreApplication
class Example(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
qbtn = QPushButton('Quit', self)
qbtn.clicked.connect(QCoreApplication.instance().quit)
qbtn.resize(qbtn.sizeHint())
qbtn.move(50, 50)
self.setGeometry(300, 300, 250, 150)
self.setWindowTitle('Quit button')
self.show()
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
В этом примере мы создаем кнопку выхода, после нажатия кнопки приложение завершится.
from
PyQt5.QtCore ``import
QCoreApplication
Нам нужен объектный модуль от QtCore.
qbtn ``=
QPushButton(``'Quit'``, ``self``)
Мы создали кнопку. Кнопка — это экземпляр класса QPushButton. Первый параметр конструктора — это текст метки, отображаемый на кнопке. Второй параметр — родительский компонент. Родительским компонентом является компонент Example, который наследует класс QWiget.
qbtn.clicked.connect(QCoreApplication.instance().quit)
В PyQt5 система обработки событий устанавливается механизмом сигналов и слотов. Если мы нажали на кнопку, посылается сигнал clicked. Слот может быть встроенным слотом Qt или вызовом метода Python. Класс QCoreApplication содержит основной цикл обработки событий, он обрабатывает и перенаправляет все события. Метод instance() возвращает нам экземпляр объекта. Обратите внимание, что класс QCoreAppli создается с помощью QApplication. Сигнал клика связан с методом quit(), который завершит приложение. Обмен событиями происходит между двумя объектами: отправителем и получателем. Отправитель — это кнопка, а получатель — объект приложения.
Message Box
По умолчанию, если мы нажмем кнопку x в строке заголовка, QWidget будет закрыт. Опять же, мы хотим изменить это действие по умолчанию. Например, если у нас есть файл, открытый в редакторе, и мы вносим в него некоторые изменения. Мы показываем окно сообщения для подтверждения этого действия.
#!/usr/bin/python3
# -*- coding: utf-8 -*-
"""
ZetCode PyQt5 tutorial
This program shows a confirmation
message box when we click on the close
button of the application window.
author: Jan Bodnar
website: zetcode.com
last edited: January 2015
"""
import sys
from PyQt5.QtWidgets import QWidget, QMessageBox, QApplication
class Example(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setGeometry(300, 300, 250, 150)
self.setWindowTitle('Message box')
self.show()
def closeEvent(self, event):
reply = QMessageBox.question(self, 'Message',
"Are you sure to quit?", QMessageBox.Yes |
QMessageBox.No, QMessageBox.No)
if reply == QMessageBox.Yes:
event.accept()
else:
event.ignore()
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
Если мы закроем QWidget, будет сгенерировано событие класса QCloseEvent. Чтобы изменить действие компонента, нам нужно переопределить метод обработчика событий closeEvent().
reply ``=
QMessageBox.question(``self``, ``'Message'``,
```"Are you sure to quit?"``, QMessageBox.Yes |`
```QMessageBox.No, QMessageBox.No)`
Мы реализуем окно сообщения с двумя кнопками: кнопки ДА и кнопки Нет. Содержимое первой строки кода отображается в строке заголовка. Вторая строка — это текст, отображаемый в диалоговом окне. Третий параметр указывает набор кнопок, отображаемых в диалоговом окне. Последний параметр — это кнопка, выбранная по умолчанию. Кнопка получает фокус с самого начала. Возвращаемое значение сохраняется в переменной ответа.
if
reply ``=``=
QtGui.QMessageBox.Yes:
```event.accept()`
else``:
```event.ignore()`
Здесь мы проверяем возвращаемое значение. Логика кода заключается в том, что если мы нажмем кнопку «Да», мы получим событие закрытия события, которое приведет к закрытию компонента и завершению работы приложения. В противном случае вместо нажатия кнопки «Да» мы проигнорируем событие закрытия.
Окно по центру экрана
Следующий сценарий показывает, как мы можем центрировать окно по окну рабочего стола.
#!/usr/bin/python3
# -*- coding: utf-8 -*-
"""
ZetCode PyQt5 tutorial
This program centers a window
on the screen.
author: Jan Bodnar
website: zetcode.com
last edited: January 2015
"""
import sys
from PyQt5.QtWidgets import QWidget, QDesktopWidget, QApplication
class Example(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.resize(250, 150)
self.center()
self.setWindowTitle('Center')
self.show()
def center(self):
qr = self.frameGeometry()
cp = QDesktopWidget().availableGeometry().center()
qr.moveCenter(cp)
self.move(qr.topLeft())
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
Класс QtGui.QDesktopWidget предоставляет информацию об окне рабочего стола, включая размер экрана.
self``.center()
Код для центрирования окна находится в пользовательском методе center().
qr ``=
self``.frameGeometry()
Мы получаем специфическую геометрию прямоугольника для главного окна. Это содержит рамку окна.
cp ``=
QDesktopWidget().availableGeometry().center()
Мы вычисляем абсолютное значение относительно дисплея. И из этого абсолютного значения мы получаем центральную точку экрана.
qr.moveCenter(cp)
Наш прямоугольник уже установил свою ширину и высоту. Теперь мы устанавливаем центр прямоугольника в середину экрана. Размер прямоугольника не меняется.
self``.move(qr.topLeft())
Мы переместили верхнюю левую точку окна приложения в верхнюю левую точку прямоугольника qr, чтобы он оказался в центре нашего экрана.
Приглашаем всех обратить внимание на официальный аккаунт Сяо Сун.«Минимальный ИИ»Возьмите вас, чтобы узнать глубокое обучение:
Обмен технологиями теоретического обучения и разработки приложений, основанными на глубоком обучении, автор часто делится содержанием сухих товаров глубокого обучения.Когда вы изучаете или применяете глубокое обучение, вы также можете общаться со мной и отвечать на любые вопросы, с которыми вы сталкиваетесь.
отЭксперт по блогам CSDN&Чжиху обозреватель глубокого обучения@小宋это?