Glade ou pas glade: Quelle est la meilleure façon D'utiliser PyGtk?
j'apprends le python depuis un moment maintenant avec un certain succès. J'ai même réussi à créer un ou deux programmes (simples) en utilisant PyGtk + Glade.
le truc c'est que je ne suis pas sûr que la meilleure façon d'utiliser GTK avec python soit de construire les interfaces en utilisant Glade.
je me demandais si les plus expérimentés parmi nous (rappelez-vous, je suis juste un débutant) pourrait souligner les avantages et les mises en garde de L'utilisation de Glade plutôt que de créer tout dans le code lui-même (en supposant apprendre les bonnes fixations gtk ne serait pas exactement un problème).
11 réponses
je dirais que cela dépend: si vous trouvez que L'utilisation de Glade vous pouvez construire les applications que vous voulez ou devez faire que ce est absolument bien. Si toutefois vous voulez réellement apprendre comment GTK fonctionne ou vous avez certaines exigences non-standard de L'assurance-chômage, vous pour creuser dans les internes GTK (qui ne sont pas si compliqués).
personnellement, je suis généralement environ 5 minutes dans un client riche quand j'ai besoin d'une fonction ou une personnalisation qui est tout simplement impossible par un designer tel que la Clairière ou Stétic. Peut-être que c'est juste moi. Néanmoins, il est toujours utile pour moi de bootstrap conception de fenêtre à l'aide d'un outil graphique.
ma recommandation: si faire des clients riches en utilisant GTK va être une partie importante de votre travail / passe-temps alors apprendre GTK aussi bien puisque vous besoin d'écrire ce code un jour.
P.S. personnellement je trouve Stétic être supérieur à Glade pour les travaux de design, si un peu plus instable.
utilisez GtkBuilder au lieu de Glade, il est intégré dans Gtk lui-même au lieu d'une bibliothèque séparée.
le principal avantage de Glade est qu'il est beaucoup, beaucoup plus facile de créer l'interface. C'est un peu plus de travail pour connecter les gestionnaires de signal, mais je n'ai jamais senti que ça comptait beaucoup.
Glade est très utile pour créer des interfaces, cela signifie que vous pouvez facilement changer l'interface graphique sans faire beaucoup de codage. Vous trouverez que si vous voulez faire quelque chose d'utile (par exemple construire un treeview) vous devrez vous familiariser avec diverses parties de la documentation GTK - en pratique trouver un bon tutoriel/exemples.
j'ai commencé à utiliser glade, mais j'ai rapidement commencé à tout faire en code. Glade est agréable pour les choses simples, et il est bon quand vous apprenez comment GTK organise les widgets (comment les choses sont emballées, etc). Construire tout en code, cependant, vous avez beaucoup plus de flexibilité. En plus, tu n'as pas la dépendance de glade.
je commence habituellement avec Glade jusqu'à ce que j'arrive à un point où il n'a pas les fonctionnalités dont j'ai besoin, par exemple la création d'un assistant. Tant que J'utilise les widgets standard que Glade fournit, il n'y a vraiment aucune raison de coder à la main l'interface graphique.
plus je me sens à l'aise avec la façon dont Glade formate le code, plus mon codage manuel est efficace. Sans mentionner, il est très facile D'utiliser Glade pour faire le cadre sous-jacent afin que vous n'ayez pas à vous soucier de toutes les initialisations.
si vous écrivez une application GUI traditionnelle qui réutilise beaucoup de composants standard de GTK+ (boutons, étiquettes, conteneurs, etc. J'irais personnellement avec Glade + Kiwi (un framework pratique pour construire des applications GTK+ GUI).
Le plus grand avantage d'utiliser Glade est qu'il réduit considérablement la disposition/le code d'emballage. Voici un exemple extrêmement simple qui montre déjà les problèmes avec la pose manuelle D'une interface graphique (sans utiliser de fonctions d'aide)):
container = gtk.HBox()
label = gtk.Label(str="test")
container.add(label)
Pour plus d'exemples prendre un regarde ici. Même si vous écrivez un widget personnalisé compliqué, vous pouvez toujours créer un placeholder dans Glade et le remplacer après instantiation.
l'équipe de Glade ne devrait plus tarder à publier une nouvelle version du designer (3.6.0). Cette nouvelle version va ajouter le support de GtkBuilder, qui remplace libglade (la bibliothèque actuelle qui transforme les fichiers XML Glade en arbre de widget). La nouvelle clairière designer ajoute également une fois de plus le support pour définir les catalogues (ensembles de widgets) en Python, de sorte que vous pouvez facilement ajouter vos propres widgets personnalisés.
je recommande L'utilisation de Glade pour le développement rapide, mais pas pour l'apprentissage. Pourquoi? parce que certaines fois vous aurez besoin de mettre au point certains widgets afin de travailler comme vous le souhaitez, et si vous ne savez pas vraiment/comprendre les attributs de propriétés de chaque widget, alors vous serez dans des problèmes.
pour les écrans rapides et simples J'utilise Glade. Mais pour tout ce qui nécessite des niveaux de contrôle plus fins, je crée des classes personnalisées pour ce dont j'ai réellement besoin (c'est important, parce qu'il est trop facile de se laisser emporter par des généralisations).
avec des applications maigres des classes spécifiques, je peux rapidement changer le look et l'application sens large d'un seul endroit. Plutôt comme utiliser CSS pour maintenir la cohérence pour les sites web.
personnellement, je recommande de le coder au lieu d'utiliser Glade. Je suis encore en train d'apprendre python et pyGtk mais je vais dire que l'écriture de L'UI à la main m'a donné beaucoup d'idées sur la façon dont les choses fonctionnent sous le capot.
une fois que vous l'avez appris je dirais de donner à glade, ou d'autres concepteurs D'UI un essai, mais certainement apprendre comment le faire de la manière "dure" d'abord.
tout d'Abord, commencer à mettre cela en perspective.
vous utiliserez GTK. Il s'agit d'une énorme bibliothèque C construite en 1993 en utilisant les meilleures traditions du style de codage des années 1970. Il a été construit pour aider à mettre en œuvre le GIMP, un concurrent de Photoshop wanna-be avec des erreurs d'interface utilisateur de legend. Un champ gui typique peut avoir 40 paramètres ou plus, la plupart du temps répétitifs, ayant des getters et des setters. Il y aura de la douleur.
le GTK lui-même gère un système de type dynamique complet en C à l'aide de GObject. Cela rend le débogage une joie particulière qui nécessite de parcourir manuellement des tableaux de pointeurs vers des méthodes pleines de listes d'arguments génériques avec héritage implicite. Vous sauterez aussi à travers les bibliothèques Pango quand vous vous y attendez le moins, par exemple, en utilisant une constante Pango pour où dans un label l'ellipse va quand la page est petite. Attendre plus de douleur.
A présent, vous vous engagez probablement à envelopper toutes vos interactions GTK dans une architecture de type Model-View-Controller spécifique votre application. Que c'est bon.
L'utilisation de Glade, ou gtkBuilder, ou Stetic, aidera coral l'énorme problème de couplage de quarante paramètres à une fonction. Glade fournit un constructeur de GUI de base pour glisser et déposer les composants ensemble. Les paramètres et les paramètres hérités sont quelque peu séparés. La sortie de la Clairière .glade fichier XML que vous lirez alors, attacher vos callbacks ("signal handlers") à des fonctions nommées de façon identique, et interroger ou mettre à jour la version en mémoire de ce XML pour obtenir des widgets que vous utilisez ensuite pyGTK pour manipuler. La Glade elle-même est grinçante et mal entretenue.
l'utilisation de pyGTK vous donne un contrôle à grain fin désagréable afin de construire votre GUI. Ce sera verbeux, copier-coller le code. Chaque attribut sera un appel de fonction séparé. L'attribut setter ne renvoie rien, donc enchaîner les appels est hors de question. Généralement, votre IDE ne donnera qu'une aide minimale sur ce que les fonctions signifient et vous serez faisant constamment référence à DevHelp ou à un autre outil.
on s'attendrait presque à ce que les interfaces graphiques GTK soient vouées à l'échec.
vous pouvez utiliser glade-2 pour concevoir, et utiliser glade2py.py à la génération du code pygtk pur, c'utilisation pygtkcompat à l'appui de gtk3