Ответ 1
По мере того, как мои путешествия в глубины PyQt5 продолжаются, я продолжу обновлять этот ответ некоторыми из более блестящих сокровищ, которые я нахожу.
Сказав это, я сейчас беру "грубый черновик" с быстрым вступлением в PyQt5. Я также расскажу о полезных ресурсах. Я новичок в этой структуре, и я расскажу о том, как я считаю хорошей стратегией ее использования, поскольку я полагаю, что эта стратегия. Есть, вероятно, другие хорошие стратегии, поэтому, если у кого-то есть что добавить, пожалуйста, оставьте комментарий. Это очень большая работа.
Стратегия
Я многому научился из кода примера, как это было предложено в другом ответе, но что-то, чему не помогают примеры, - это глубокая магия PyQt5. Рамки с большим количеством магии в них (PyQt5, Django, SQLAlchemy,...) великолепны, потому что огромное количество тяжелой работы отвлекается от вас. С другой стороны, не всегда ясно, что, черт возьми, происходит, или то, что вы должны делать с этим.
К счастью, похоже, у нас есть варианты:
-
QtDesigner: В те дни, когда ваша клавиатура загорается, в установочном пакете вызывается графический GUI-Builder. Когда вы увидите код, который он производит (возможно, только в версии сообщества?), Вы поймете, почему это может быть не панацея, которая кажется.
-
QML: Еще один кандидат на панацею: декларативное графическое здание из форматированного JSON. Yum.
-
Qt Quick: основа для QML. К этому моменту это может казаться мучительно легким, но пока этого не нужно втягивать. Кажется, это сводится к изучению этого вручную.
-
Модель-представление Framework (1): Model-View (не MVC) отделяет код, который имеет дело с презентацией/взаимодействие с кодом, управляющим данными, с целью обеспечения модульности.
Кодирование в PyQt5 значительно упрощается с помощью набора классов, реализующих шаблон проектирования Model-View. Model-View - это эволюция Model-View-Controller (MVC), в которой контроллер воссоединился с представлением. Они кажутся странными друзьями, но большая часть программной логики связана либо с пользователем, либо с данными: он, кажется, имеет определенный смысл, по крайней мере, на уровне стратосферы.
От глаз птицы:
Архитектура (ы)
Model-View-Controller
Этот широко используемый шаблон дизайна разделяет приложение на 3 слоя:
- Модель ~ > Инкапсулирует данные. Уведомляет View и Controller о любых изменениях базовых данных. Это приводит к обновлению отображения выходных или доступных команд, соответственно.
- Просмотр ~ > Отображает соответствующий вывод модели для пользователя.
- Контроллер ~ > Инкапсулирует взаимодействие с пользователем и уведомляет модель и представление соответствующих событий.
Model-View
- Графическая среда представления (1) ~ > Представляет все (включая встроенные QWidgets и т.д.) внутри QGraphicsScene как QGraphicsItem (или его производных), включая прокси-классы для встраивания виджетов. Элементы предположительно сильно оптимизированы, а интеграция поддержки OpenGL - однострочный, что приятно.
Этот шаблон дизайна помещает контроллер в представление. Таким образом, представление способно полностью обрабатывать взаимодействие пользователя. В конкретных терминах это механизмы сигналов и слотов.
Управление взаимодействием с пользователем
Обратные вызовы
Сигналы и слоты
..... ** Извините, но я должен подписать сейчас. Я вернусь, чтобы продолжить добавлять к этому. **
Практический пример (ы)
Как, например, вы можете взять древовидное представление из примера itemviews/editabletreemodel
, а затем поменять местами в модели файловой системы (QFileSystemModel
) из примера itemviews/dirview
, и у вас есть полное (рабочее) представление дерева вашего каталога. Довольно унылый.
Итак, вы бы взяли код из примера editabletreemodel:
headers = ("Title", "Description")
file = QFile(':/default.txt')
file.open(QIODevice.ReadOnly)
model = TreeModel(headers, file.readAll())
file.close()
self.view.setModel(model)
... и свопинг в модели из dirview:
model = QFileSystemModel()
model.setRootPath('')
self.view.setModel(model)
... и он просто работает. Удивительно.
Следующий шаг (в моем случае) (* я думаю) реализует пользовательскую модель, в которой я буду использовать несколько просмотров одновременно, но я не знаю, подходит ли это для вашего случая использования.
Ресурсы
Вот некоторые драгоценные камни, которые я нашел в своих путешествиях. Надеюсь, они помогут вам.
Это учебник по Model-View для Qt5. (1) Это очень подробный документ из официальных документов Qt5. Много полезной документации можно найти на сайте Qt5. Имейте в виду, что это для Qt5 (библиотека С++), но разница тривиальна для чтения (и официальные документы PyQt5 указывают там все равно).
В этом PDF-документе представлен быстрый высокоуровневый подход к структуре Model-View PyQt4. Обратите внимание, что это для PyQt4 (не PyQt5), но на самом деле это для Python ( в отличие от С++), и я очень быстро научил меня.
Я только начинаю играть с графическим представлением и нахожу этот учебник по графическому представлению Framework очень полезным. Это тот же вид, который используется в примере кода qtdemo
для генерации некоторых эффектов скольжения. Я немного обновлю это.
Это полный список всех модулей Qt5.
Это полный список всех классов Qt5.
Это полный список всех функций API Qt5.
Как сказал katsh в другом ответе на ответ, вот ссылка на пример кода для PyQt5.2.1 на GitHub
Кроме того, копия кода примера поставляется в комплекте с вашим дистрибутивом и может быть найдена по адресу:
%PYTHON_HOME%\Lib\site-packages\PyQt5\examples
Если вы используете PyDev (Eclipse), вы можете запускать примеры, просто щелкнув правой кнопкой мыши пример основного файла модуля в PyDev Package Explorer или Navigator =: > Run As =: > Python Run
Лучший из моих (не очень) скромных мнений:
%PYTHON_HOME%\Lib\site-packages\PyQt5\examples\qtdemo\qtdemo.py
Среди моих текущих проектов я в этом процессе обратного проектирования. Если вы это проверите, вы поймете, почему. Продолжение следует.;)
Наслаждайтесь!