pyqt5 учебник
Начало работы с pyqt5
Поиск…
замечания
В этом разделе приведен обзор того, что такое pyqt5, и почему разработчик может захотеть его использовать.
Следует также упомянуть о любых крупных предметах в pyqt5 и ссылаться на связанные темы. Поскольку документация для pyqt5 является новой, вам может потребоваться создать начальные версии этих связанных тем.
Установка или настройка
- Установите Anaconda (встроенный PyQt5), особенно для пользователей Windows.
- Интегрируйте QtDesigner и QtUIConvert в PyCharm (внешние инструменты)
- Написать демо
- 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_())
Привет, мир
В этом примере создается простое окно с кнопкой и редактирование строки в макете. Он также показывает, как подключить сигнал к слоту, так что нажатие кнопки добавляет текст в редактирование строки.
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_()
.
Добавление значка приложения
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 (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()
дает рекомендуемый размер для кнопки.
Пакет вашего проекта в 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
- затем dist
python .\setup.py bdist_msi