web-dev-qa-db-fra.com

Existe-t-il un tutoriel spécifique à PyQt5?

Je cherche un tutoriel sur PyQt5. Il est assez compliqué de commencer le développement d'une interface graphique avec Python pour la première fois sans tutoriel.

Je n’ai trouvé jusqu’à présent que quelques tutoriels PyQt4, et depuis que quelque chose a changé de Qt4 à Qt5, par exemple le fait que SIGNAL et SLOT ne sont plus supportés dans Qt5, il serait bien d’avoir des tutoriels spécifiques pour PyQt5.

Quelqu'un peut-il s'il vous plaît fournir un tutoriel sur la façon de démarrer le développement d'interface graphique avec PyQt5?

62
WeGi

Alors que mes voyages dans les profondeurs de PyQt5 se poursuivent, je continuerai également à mettre à jour cette réponse avec certains des trésors les plus brillants que je trouve.

Cela étant dit, je me lance maintenant dans un "brouillon" lors d'une introduction rapide à PyQt5. Je fournirai également des liens vers des ressources utiles. Je suis également novice dans ce cadre, et je préciserai ce que je pense être une bonne stratégie pour l’utiliser, au fur et à mesure que je le définirai. Il existe probablement d'autres bonnes stratégies. Si quelqu'un a quelque chose à ajouter, laissez un commentaire. C'est vraiment un travail en cours.


Stratégie

J'ai beaucoup appris de l'exemple de code suggéré dans l'autre réponse, mais la magie profonde de PyQt5 n'aide pas ces exemples. Les frameworks contenant beaucoup de magie (PyQt5, Django, SQLAlchemy, ...) sont excellents, car une énorme quantité de travail fastidieux vous échappe. D'un autre côté, on ne sait pas toujours ce qui se passe ou ce que vous êtes censé faire à ce sujet.

Heureusement, il semble que nous ayons des options:

  • QtDesigner : Pour les jours où votre clavier prend feu, un générateur de GUI appelé Rockin 'est appelé dans le package d'installation. Lorsque vous voyez le code que cela produit (peut-être uniquement dans la version de communauté?), Vous verrez pourquoi cela peut-être n'est pas la panacée, semble-t-il.

  • QML : Autre candidat à la panacée: création d’une interface graphique déclarative à partir de JSON formaté. Miam.

  • Qt Quick : Le framework pour QML. À ce stade, cela peut sembler incroyablement facile, mais ne vous laissez pas entraîner par ce genre de choses pour le moment. Il semble toujours que l’apprentissage se fasse à la main.

  • Le cadre de vue modèle(1) : Model-View (not MVC) sépare le code qui traite de la présentation/interaction du code qui gère les données, dans le but de fournir une modularité.

Le codage dans PyQt5 est grandement simplifié en utilisant l'ensemble de classes qui implémentent le modèle de conception Model-View. Model-View est une évolution de Model-View-Controller (MVC), dans laquelle le contrôleur a été réuni avec la vue. Ils ressemblent à d’étranges compagnons de lit, mais la plupart du temps, la logique du programme est concerne l’utilisateur, ou les données: cela semble avoir un certain sens, du moins au niveau stratosphérique.

À vol d'oiseau:

Architecture (s)

Model-View-Controller

Ce modèle de conception largement utilisé sépare l’application en 3 couches:

  1. Model ~> Encapsule les données. Notifie View et le contrôleur de toute modification apportée aux données sous-jacentes. Cela provoque des mises à jour de l'affichage de la sortie ou des commandes disponibles, respectivement.
  2. View ~> Affiche la sortie correspondante du modèle à l'utilisateur.
  3. Controller ~> Encapsule les interactions de l'utilisateur et informe le modèle et la vue des événements pertinents.

Vue de modèle

  • Le cadre de la vue graphique(1) ~> Représente tout (y compris les QWidgets incorporés, etc.) à l'intérieur d'un QGraphicsScene en tant que QGraphicsItem (ou un dérivé de celui-ci), y compris les classes de proxy pour incorporer des widgets. Les éléments sont supposés être hautement optimisés, et l’intégration du support OpenGL est un one-line, Nice.

Ce modèle de conception place le contrôleur dans la vue. De cette façon, la vue est capable de gérer l'intégralité de l'interaction de l'utilisateur. Concrètement, il s'agit des mécanismes de signaux et de machines à sous.

Gestion de l'interaction utilisateur

Rappels

Signaux et Slots

..... ** Je suis désolé, mais je dois signer maintenant. Je serai de retour pour continuer à ajouter à cela. **

Exemple (s) pratique (s)

Comme par exemple, vous pouvez utiliser une vue arborescente à partir du itemviews/editabletreemodel exemple, puis échangez un modèle de système de fichiers (QFileSystemModel) à partir du fichier itemviews/dirview exemple et vous obtenez une vue complète (de travail) de votre arborescence de répertoires. Assez snazzy.

Ainsi, vous prendriez le code de l'exemple editabletreemodel:

headers = ("Title", "Description")

file = QFile(':/default.txt')
file.open(QIODevice.ReadOnly)
model = TreeModel(headers, file.readAll())
file.close()

self.view.setModel(model)

... et permutez le modèle à partir de dirview:

model = QFileSystemModel()
model.setRootPath('')
self.view.setModel(model)

... et ça marche. Incroyable.

La prochaine étape (dans mon cas) (* je pense) implémente un modèle personnalisé pour lequel j'utiliserai simultanément plusieurs vues, mais je ne sais pas si cela correspond à votre cas d'utilisation.

Ressources

Voici quelques joyaux que j'ai trouvés lors de mes voyages. Espérons qu'ils vous aident sur le vôtre.

Ceci est un tutoriel sur Model-View pour Qt5.(1) C’est un document très détaillé tiré de la documentation officielle de Qt5. Vous trouverez une bonne quantité de documentation utile sur le site Qt5. N'oubliez pas que c'est pour Qt5 (la bibliothèque C++), mais la différence est triviale à lire (et la documentation officielle de PyQt5 le montre de toute façon).

This PDF contient un aperçu de haut niveau du framework Model-View de PyQt4. Notez que c'est le cas pour PyQt4 (pas PyQt5), mais en réalité pour Python (contrairement au C++), et j’ai trouvé cela très vite, m’a beaucoup appris.

Je commence tout juste à jouer avec la vue graphique et je trouve ce tutoriel sur la structure de la vue graphique très utile. C'est la même vue que celle utilisée dans l'exemple de code qtdemo pour générer des effets clairs. Je mettrai à jour cela dans un peu.

Ceci est une liste complète de tous les modules Qt5.

Ceci est une liste complète de toutes les classes Qt5.

Ceci est une liste complète de toutes les fonctions de l'API Qt5.

Comme le soulignait katsh dans une autre réponse, voici un lien vers l'exemple de code pour PyQt5.2.1 sur GitHub

En outre, une copie de l'exemple de code fourni avec votre distribution est disponible à l'adresse suivante:

%PYTHON_HOME%\Lib\site-packages\PyQt5\examples

Si vous utilisez PyDev (Eclipse), vous pouvez exécuter des exemples en cliquant simplement avec le bouton droit de la souris sur le fichier de module principal d'un exemple dans PyDev Package Explorer ou dans Navigator =:> Exécuter en tant que:: = Python Exécuter

Le meilleur, à mon avis (pas si humble), est:

%PYTHON_HOME%\Lib\site-packages\PyQt5\examples\qtdemo\qtdemo.py

Parmi mes projets actuels, je suis en train de procéder à la rétro-ingénierie de cet exemple. Si vous vérifiez, vous verrez pourquoi. À suivre.. ;)

Prendre plaisir!

71
Inversus

Vous recherchez des tutoriels PyQt5 depuis un certain temps? Cherchez pas plus loin! Vous n'en trouverez pas beaucoup sur Internet.

Pas vraiment des tutoriels, mais des scripts de base assez explicites sous le chemin suivant:

/ python/lib/site-packages/PyQt5/examples

vous trouverez sur 100 exemples dans 30 dossiers allant du débutant au avancé, couvrant les fenêtres de base, les menus, les onglets, les présentations, le réseau, OpenGL, etc.

28
Pete

Jetez un œil à http://www.thehackeruniversity.com/2014/01/23/pyqt5-beginner-tutorial/ Ceci est un tutoriel convivial pour débutants

8
user1801060