Vue d'ensemble du développement GUI Python (Bonjour tout le monde) - Python Central

Python est bien adapté pour le développement rapide d'applications multiplateformes de toutes sortes, et qui comprend des applications de l'interface graphique de bureau. Il y a des choix à effectuer lors du démarrage de développer une application graphique en Python, cependant, et cet article fournit les informations dont vous avez besoin de mettre sur le droit chemin. Nous allons discuter de ce que des boîtes à outils graves de l'interface graphique sont disponibles pour Python, leurs forces et leurs faiblesses, et de fournir une simple application de démonstration pour chacun.

Demo « Bonjour tout le monde » Présentation de l'application

L'application de démonstration est simple: une fenêtre contenant une zone de liste déroulante qui présente les choix « bonjour », « au revoir » et « heyo »; une zone de texte dans lequel peut être saisie de texte libre; et un bouton qui, lorsque vous cliquez dessus, imprime un message d'accueil assemblé à partir des valeurs de la zone de liste déroulante et zone de texte - par exemple "Bonjour le monde!" - à la console. Voici une maquette de l'exemple de l'application:

Vue d'ensemble du développement GUI Python (Bonjour tout le monde) - Python Central

Notez que toutes les boîtes à outils présentés ici se prêtent à une approche orientée objet semblable à notre application simple; il est un objet qui hérite d'un objet graphique de niveau supérieur, comme une application, une fenêtre ou cadre. La fenêtre d'application est remplie d'un widget disposition verticale qui gère l'agencement des widgets de contrôle. D'autres boîtes à outils de l'interface graphique pour Python, comme le pyFLTK long obsolète ou EasyGUI simpliste, prennent des approches différentes, mais les boîtes à outils discutés ici représentent le courant dominant du développement des bibliothèques Python GUI.

Le choix d'un GUI Python Toolkit

Une mise en garde: La plupart des informations disponibles en ligne - par exemple, dans l'article GUI du wiki Python ou Python 2.7 FAQ - est hors date et induire en erreur. La plupart des boîtes à outils sur ces pages ont été maintenus depuis cinq ans ou plus, et d'autres sont trop immatures ou non documentés pour une utilisation sérieuse. En outre, ne pas utiliser la page Choisir votre boîte à outils GUI que j'ai vu galvaudé ici et là; son code de pondération, il est presque impossible de choisir quoi que ce soit, mais wxPython.

Nous examinerons les quatre boîtes à outils GUI Python les plus populaires: TkInter, wxPython, pygtk / pygobject et PyQt / PySide.

TkInter est le grand vieillard du monde GUI Python, après avoir été distribué avec Python presque depuis la langue a été fondée. Il est multi-plateforme et omniprésente, stable et fiable, et facile à apprendre, il a un orienté objet, API brillamment Pythonic, et il fonctionne avec toutes les versions de Python, mais il a quelques inconvénients aussi:

Prise en charge limitée pour thématisation

Avant Python 2.7 / 3.1, TkInter avait pas de soutien pour thématisation, donc sur toutes les plateformes de ses widgets dessiné sur mesure avaient l'air Motif vers 1985. Depuis, le module de TTK a introduit des widgets thématiques, qui améliorent l'aspect un peu, mais laissent des contrôles peu orthodoxes, par exemple comme OptionMenus, en place.

Petite sélection de widgets

Tkinter manque quelques widgets d'autres boîtes à outils fournissent, tels que listboxes non textuels, véritables boîtes-combo, fenêtres et autres défilées. Certains contrôles supplémentaires ont été fournis par des tiers, par exemple Tix pour fournir le manque. Mock votre demande à l'avance si vous envisagez d'utiliser TkInter, et assurez-vous qu'il peut fournir à chaque commande dont vous avez besoin, ou vous pourriez vous brûler plus tard.

Demo App / Bonjour tout le monde dans Tkinter

PyQt / PySide

Qt est plus une boîte à outils widget; il est un cadre d'application multi-plateforme. PyQt, son interface Python, a depuis des années, et est stable et mature; il a acquis une certaine cochonneries au fil des ans, avec deux API disponibles, connues sous le nom API 1 et 2 API, et un grand nombre de fonctionnalités dépréciées. De plus, même si Qt est disponible sous licence LGPL, PyQt est distribué sous licence GNU GPL les versions 2 et 3 ou dans une version commerciale assez coûteuse, ce qui limite vos options de licence pour votre code.

PySide est une réponse aux inconvénients de PyQt. Il est libéré sous la LGPL et omet toutes les fonctionnalités dépréciées avant PyQt 4.5 ainsi que l'API ensemble 1, mais est par ailleurs presque entièrement compatible avec l'API PyQt 2. Il est un peu moins mature que PyQt, mais est plus activement développé.

Peu importe qui vous choisissez emballage, Python et Qt fonctionnent très bien ensemble. L'API plus moderne 2 est assez Pythonic et est clair, il y a une très bonne documentation disponible (bien que ses racines dans les documents Qt C ++ sont évidents), et les applications qui en découlent semblent fracassant dans les versions récentes, sinon tout à fait naturel. Il y a chaque widget GUI que vous pourriez désirer, et fournit Qt plus - des classes intéressantes pour traiter XML, le multimédia, l'intégration de bases de données, et la mise en réseau - si vous êtes probablement mieux utiliser les équivalents bibliothèques Python pour la plupart des fonctionnalités supplémentaires.

Le plus grand inconvénient de l'utilisation d'une enveloppe Qt est que le framework Qt sous-jacente est énorme. S'il est important de vous que votre package distribuable soit petit, choisissez TkInter, qui est non seulement faible, mais déjà une partie de Python. , Tandis que Qt utilise également des API du système d'exploitation pour adapter ses widgets à votre environnement, tous ne sont pas strictement indigènes; wxPython serait un meilleur choix si natif look-and-feel est une considération importante pour vous. Mais PyQt a beaucoup pour lui, et est certainement mérite d'être examinée.

Demo App / Bonjour tout le monde dans PyQt / PySide

Remarque: Pour Qt, je l'ai utilisé PySide; l'exemple de code serait exécuté à l'aide PyQt avec seulement quelques lignes de la différence.

Salut, je l'ai appris Python au cours des 6 derniers mois (je suis un programmeur expérimenté ancien scholl, avec C et de l'expérience Assembleur). J'ai installé PySide, mais havent trouvé un tutoriel qui explique comment créer GUI clairement. une chance que vous pourriez;
1) recommander tutoriel pour débutants dans l'interface graphique avec PySide
2) Recommander un concepteur graphique qui fonctionne avec PySide, j'ai essayé un, mais a eu des résultats très unpredicctable avec elle
Merci de bien vouloir

Grand pour entendre, bienvenue à l';-) du côté obscur.

2. De loin le meilleur concepteur de l'interface graphique (et une seule que je connaisse) pour PySide / PyQt est Qt Designer. Qt Creator (un IDE) construit cela dans, il est donc le même. Il crée un fichier XML, qui compile le code Python. Il est essentiellement tout aussi rapide que la construction manuellement une interface graphique, et fonctionne très bien. Mais je vous recommande que lorsque vous êtes à l'aise avec le cadre, vous apprendre à construire des interfaces graphiques manuellement à l'aide des conteneurs et des widgets individuels avec le code brut. Dans la pratique, je vous recommande personnellement de toujours utiliser le concepteur, car il est beaucoup plus rapide et aucune différence de performance notable. Cependant, il va vous apprendre beaucoup de travail des internes de PySide, et laissez-vous déboguez des problèmes bizarres beaucoup plus rapide.

Hey Jackson, je suis aussi sur le même chemin et je voulais (mal documenté) pour demander quelque chose: Il semble que la dernière version de PyQT est la version 5, alors que PySide est basé sur la version 4.8 de PyQT. Savez-vous s'il y a une différence importante entre les deux versions de PyQt de base et pourquoi (le cas échéant) on préférerait la version 5 de plus de 4?

Hey Paul. Qt 5.0 introduit plusieurs nouvelles fonctionnalités. Vous pouvez voir la différence entre PyQt 4.x et 5.x PyQt ici. Cela dépend vraiment de savoir si vous avez besoin des fonctionnalités de Qt 5.0. Cependant, gardez à l'esprit que PyQt et PySide ne sont pas exactement les mêmes, il y a quelques différences techniques.

A noter également que PyQt est sous licence GPL, alors que PySide est sous licence LGPL. Donc, si vous développez une application propriétaire, vous aurez besoin d'acheter une licence de Riverbank (le producteur de PyQt).

PySide (à mon humble avis) a une licence plus libérale, et a un fort soutien communautaire derrière elle. Alors que tout PyQt est bien développé et soutenu, il est à la merci de la compagnie derrière elle. AFAIK PySide ne prend pas en charge Qt 5.0 en ce moment, et il est même pas dans la feuille de route immédiate. Ainsi, plusieurs facteurs entrent en jeu.

Salut, il doit y avoir un document simple comment démarrer avec un projet PyQt (ou PySide) en utilisant * QtCreator *, ou bien son trop d'un obstacle à soi-même enseigne, je pense, et il suffit d'utiliser ce que l'on utilise avant (par exemple QtCreator avec C ++).

Nous sommes en train de pousser à un peu plus de contenu. Je ferai en sorte que nous avons un peu de contenu Qt Creator là-dedans aussi ;-).

Articles Liés