Python comment faire un IUG

Dans ce tutoriel, nous utiliserons Tkinter pour construire une interface utilisateur graphique que nous pouvons utiliser pour maintenir une simple liste de téléphone. Sur le chemin, nous allons jouer avec plusieurs widgets Tkinter à travers le message interactif Python, obtenir, espérons une bonne idée de la façon dont toutes les pièces fonctionnent ensemble. Ensuite, nous allons étudier un événement fonctionnel pilotée par un programme d'interface graphique.







Il est préférable si vous suivez avec Python dans une autre fenêtre et regarder les widgets aller et de venir et de se déplacer. Assurez-vous que vous utilisez l'exécutable python.exe ordinaire et non l'un des IDE comme IDLE ou PythonWin. Parfois, les graphiques qu'ils font vont interférer avec les graphiques que nous créons pour résultat un comportement étrange.

La quantité de Tk qui est introduit dans ce tutoriel est petit mais étonnamment efficace pour de nombreuses applications. Cependant, vous pouvez également avoir une bonne référence pour découvrir d'autres widgets tels que les cases à cocher et des boutons radio, ainsi que la façon d'étendre les fonctionnalités des widgets introduits ici.

Jouer avec des boutons

La première chose à faire est d'importer le module Tkinter. En général, cela se fait par l'importation du module dans notre espace de noms local afin que nous puissions utiliser les classes et constantes par leurs noms (comme étiquette, Button, TOP) au lieu d'avoir à se qualifier constamment tout (comme Tkinter.Label, Tkinter.Button, Tkinter .HAUT). Alors laisse le faire en premier.

Maintenant, si ce produit un message d'erreur, cela signifie que soit Tk / Tcl ne soit pas installé sur votre système ou que Python n'est pas lié. Vous devrez corriger cela avant de poursuivre et probablement impliquer votre administrateur système. Dans le cas contraire, si tout est calme, essayez la première commande qui va créer une fenêtre et l'affecter à la variable « gagner ».

Vous devriez maintenant avoir une petite fenêtre sur votre écran avec dans la barre de titre « tk ». Créons un couple de boutons pour cette fenêtre

Vous pourriez être surpris que les boutons ne sont pas apparus dans la fenêtre. Ils doivent être placés d'abord avec l'un des soi-disant responsables de la géométrie. Les deux plus courantes sont « pack » et « grille ».

Utilisation du module Gestionnaire

Notez que, après la première commande, le bouton est placé dans la fenêtre et la fenêtre lui-même est réduite à la taille du bouton. Lorsque le deuxième bouton est emballé la fenêtre est élargie pour l'accueillir. La valeur par défaut les TOP empilés verticalement dans l'ordre où ils ont été emballés.

Maintenant, essayez les deux commandes suivantes.

Maintenant, les boutons ressemblent

En pratique, le gestionnaire de géométrie de bloc est généralement utilisé dans un de ces deux modes de placer un ensemble de widgets soit dans une colonne verticale ou une ligne horizontale.

Nos boutons ressemblent un peu Squished. Nous pouvons résoudre ce problème en les emballant avec un peu de rembourrage. « Padx » ajoute des pixels à gauche et à droite et « pady » les ajoute à haut et en bas.

Je vous suggère de créer un couple plus de boutons et de jouer à fond et à droite pour obtenir une bonne idée pour le gestionnaire « pack ».

Utilisation de la grille Gestionnaire

Une autre façon de placer les widgets (boutons, des étiquettes et ainsi de suite) se trouve dans une table ou grille. Ici, la fenêtre parent est divisé en lignes et en colonnes et chaque widget est placé dans une cellule donnée. Le gestionnaire du réseau assure le suivi du nombre de lignes et colonnes sont réellement nécessaires et remplit la fenêtre en conséquence. Il assure également le suivi de la largeur de chaque colonne et chaque rangée de quelle taille doit être d'accueillir le plus grand widget dans cette ligne ou colonne. Les lignes ne sont pas toutes à la même hauteur et les colonnes ne doivent pas tous être de la même largeur.

Faisons une nouvelle fenêtre avec les mêmes boutons, mais cette fois-ci les mettent dans deux par deux grille.

Vous pouvez voir que l'espace vide est laissé puisque rien a été mis en ligne 0, colonne 1 ou en ligne1, colonne 0. Utilisons cela comme une opportunite pour regarder un nouveau type de widget.

Un widget label est utilisé pour placer le texte dans la fenêtre et est très simple.

Remarquez comment l'étiquette a poussé la largeur de la colonne 0 sur pour accueillir le texte.

mises en page plus complexes.

En plus de l'emballage et la grille il y a une méthode de place pour positionner un widget à un endroit précis à l'intérieur d'un cadre ou une fenêtre. Il est pas souvent utilisé car il est franchement plus facile de laisser l'emballage et la grille se propagent juste les choses au besoin, surtout si vous utilisez la souris pour réduire ou agrandir une fenêtre.







Il y a d'autres arguments de mots-clés qui sont communs lors de l'utilisation ou de la grille soit paquet. Nous avons vu padx et pady ci-dessus. Avec grilles il y a un paramètre « collant » qui prend une carte de coordonnées comme N, E, S, W, NE, etc. Si la cellule de grille est plus grande que votre widget, car un widget plus grand est dans la même ligne ou colonne, collant aide vous mettez le widget où vous le souhaitez dans la cellule.

À ce stade, vous pouvez consulter votre guide de référence et jouer avec d'autres paramètres clés de l'invite interactive afin d'obtenir une bonne idée de la façon dont ils fonctionnent.

Amener les boutons à la vie.

Comme nous l'avons vu, les widgets sont des objets et ont des méthodes. Nous avons utilisé les méthodes d'emballage et de la grille. Maintenant, nous allons utiliser une nouvelle méthode, « configure ».

tout à coup notre fenêtre ressemble

Les boutons sont liés à des fonctions de rappel à l'aide du paramètre « commande », soit lorsque le bouton est créé ou configurer. Commençons par définir une fonction qui imprime simplement un message

Maintenant, lorsque l'on clique sur « Uno » le message est imprimé.

widgets d'entrée

Pour saisir du texte de l'utilisateur, nous utilisons un widget entrée. Tout comme dans le cas des boutons que nous avons besoin d'un moyen de communiquer avec le widget d'entrée, dans ce cas, pour définir et récupérer le texte. Cela se fait avec un objet spécial Tkinter appelé LaChaine qui tient simplement une chaîne de texte et nous permet de définir son contenu et de le lire (avec get). Commençons par une fenêtre propre.

Maintenant tapez ce « ceci est un test » dans l'entrée, puis le récupérer de notre objet lié LaChaine

Nous pouvons également mettre du texte dans notre objet LaChaine et le faire apparaître dans le widget d'entrée.

Le widget Listbox

Notre dernier widget dans le projet nous laisser un menu d'éléments à choisir. Une zone de liste est créée avec la commande suivante (après l'ouverture d'une fenêtre). Le paramètre « hauteur » limite le nombre de lignes montreront.

La quatrième entrée ne montre pas depuis la zone de liste est définie à seulement 3 lignes.

Cela semble bon, mais si vous utilisez la barre de défilement, vous verrez qu'il ne fait rien encore. La barre de défilement et la liste doivent connaître les uns les autres. Cela se fait de manière similaire à la façon dont nous nous sommes amarrés boutons pour appelerons fonctions. Deux appels sont nécessaires, un à raconter au sujet de l'autre.

Maintenant, manipuler la barre de défilement et voir le répondre listbox.

Si vous avez sélectionné un élément dans la liste, la méthode curselection le retourne pour vous. En fait, il retourne un tuple d'éléments sélectionnés. Il est possible de configurer la zone de liste pour permettre plusieurs éléments à sélectionner ensemble. Un tuple vide est retournée si aucun élément est sélectionné. Sinon, le tuple contient l'index (es) des éléments sélectionnés. (Mais comme des chaînes!)

Par exemple, cliquez sur le 3ème point et procédez comme suit. Dans les index de la mode Python typique commencent à zéro.

Mettre tous ensemble.

Notre éditeur de liste de téléphone utilise toutes les fonctionnalités abordées jusqu'à présent plus un peu plus que nous allons aborder. Voici une vue de l'application en cours d'exécution.

Python comment faire un IUG

Maintenant serait un bon moment pour apporter pour faire apparaître la source python dans une autre fenêtre ou faire une impression. Cliquez ici pour voir la source. Cliquez ici pour voir la liste téléphonique initiale.

La « phonelist » variable est une liste de paires nom / numéro de téléphone. Comme nous travaillons avec les entrées de paires d'application seront ajoutés, modifiés et supprimés.

La première chose que le programme ne fait qu'appeler makeWindow, renvoyant une référence à ce qui est stocké dans la variable « gagnant ». En regardant le code dans la fonction « makeWindow » nous pouvons voir tous les widgets parlé ci-dessus. Les widgets sont mis en trois images qui sont ensuite disposés verticalement.

Le cadre supérieur est une grille de 2x2 pour les champs de nom et d'entrée de téléphone et les étiquettes à gauche d'entre eux. Remarquez la forme plutôt étrange de l'appel

Notez que deux globals, « nameVar » et « phoneVar » objets de STRINGVAR de référence qui sont liés aux widgets d'entrée « nom » et « téléphone ».

Le deuxième cadre contient les 4 boutons emballés gauche à droite. Chacun d'eux est lié à une fonction de rappel que nous reparlerons. Ici, nous avons attribué chaque bouton à une variable (comme « b1 ») mais étant donné que nous ne nous pouvions y accéder plus tard fait la même chose que nous avons fait avec l'étiquette ci-dessus.

Enfin, la zone de liste et son scrollbar sont emballés dans leur propre frame3. Les paramètres « remplissage » guarentee que la barre de défilement et listbox sera la même hauteur et que la zone de liste (fill = les deux) étendre à toute la largeur de la fenêtre parent.

Une fois que la fenêtre est construite et la zone de liste initialement peuplée est appelé une nouvelle fonction win.mailoop (). Cela met le programme en mode événementielle où tout ce qui se passe, jusqu'à ce que le programme se termine, est due à des fonctions de rappel, lancé dans ce programme en cliquant sur les boutons.

Exécutez le programme et cliquez sur l'un des noms dans la liste. Cliquez ensuite sur le bouton Charger. Le nom et numéro de téléphone de votre choix devrait apparaître dans les widgets d'entrée. En cliquant sur le bouton Charger activé la fonction de rappel LoadEntry qui a d'abord accédé à l'index de votre sélection listbox (via la fonction whichSelected ()) puis a accédé aux données de la liste « phonelist ». maintenant modifier les widgets d'entrée contenu et cliquez sur Mettre à jour ou Ajouter. Jouez aussi avec la fonction Supprimer.

Une petite étude minutieuse devrait faire de ce programme tout à fait compréhensible. Mais il est incomplet est plusieurs égards. La plupart aveuglante, il n'y a aucun moyen d'enregistrer vos modifications lorsque la fenêtre est fermée! À titre d'exercice, ajoutez un bouton Enregistrer et le faire fonctionner. Une possibilité est d'avoir un rappel automatique Enregistrer écrire un nouveau « phones.py » pour importer la prochaine fois que le programme est exécuté. Une autre est d'utiliser le module « cornichon » pour stocker le contenu de « phonelist » entre les courses.

Dans le suivi de cette étude, nous allons étendre ce programme à utiliser une base de données MySQL pour stocker la liste de téléphone. Cela permettra à plusieurs personnes de modifier la liste en même temps.







Articles Liés