uk ru en pl cs sk bg de es it ro hu tr ar id ja zh

Python 1.Les fonctionnalités d'implémentation de la GUI dynamique sur les widgets de la bibliothèque Tix: ScrolledWindow et NoteBook

À la principale À propos du symbole

L'un des avantages du langage de programmation dynamique Python est la possibilité de créer dynamiquement une interface utilisateur graphique (GUI) au moment de l'exécution. Bibliothèque intégrée Tkinter vous permet de créer, de placer et de déplacer une variété d'éléments graphiques pour l'information de contrôle, d'entrée et de sortie - widgets. Cependant, la bibliothèque Tkinter possède une fonctionnalité, si le nombre de widgets devient plus grand que permet d'afficher la fenêtre avec les tailles maximales disponibles pour votre écran de contrôle, il y a un problème d'accès à la zone cachée de la fenêtre.

L'extension de la bibliothèque intégrée Tkinter, la bibliothèque Tix (Tk Interface Extension) peut résoudre ce problème à l'aide du widget ScrolledWindow - une fenêtre avec des barres de défilement. Le deuxième widget utile fourni avec la bibliothèque Tix est la fenêtre à onglets - NoteBook.

Cependant, l'utilisation de ces widgets dans les applications fenêtrées de Python a ses propres particularités d'affichage d'informations dans le cas où les widgets internes ne correspondent pas à la taille de la fenêtre assignée. Dans cet article, nous allons examiner ces fonctionnalités lors de l'organisation d'une interface graphique dynamique:
Le premier exemple consiste à placer le widget ScrolledWindow dans la fenêtre principale de l'application, et ainsi tous les autres widgets seront automatiquement placés dans celui-ci.
Le deuxième exemple consiste à placer les widgets ScrolledWindow uniquement dans les onglets du widget NoteBook.

Les exemples présentés ici sont mis en œuvre dans Python 2.7 et le système d'exploitation Linux: Ubuntu 16.04LTS. J'espère que la mise en œuvre de ces exemples dans votre version de Python et le système d'exploitation ne vous présentera aucune complexité.


Exemple No.1 - ScrolledWindow widget en tant que conteneur principal de l'application entière.

#!/usr/bin/python

import Tix as tx

root=tx.Tk()
root.geometry("800x600+0+10")

swr=tx.ScrolledWindow(root)
swr.pack(fill=tx.BOTH, expand=1)

nb=tx.NoteBook(swr.window)
nb.pack(fill=tx.BOTH, expand=1)

for i in range(1,21):
	nb.add("tab"+str(i),label="Tab "+str(i))

for k in range(1,39):
	l=tx.Label(nb.tab1,text="label "+str(k))
	l.pack()

for k in range(1,29):
	l=tx.Label(nb.tab2,text="label "+str(k))
	l.pack(side=tx.LEFT)

root.mainloop()

Le résultat du scénario No.1 peut être vu dans les trois figures suivantes:


Figure 1

La vue initiale de l'application No.1 après le lancement. Il est visible l'apparition automatique de barres de défilement à droite et en bas de la fenêtre principale. Étant donné que la taille totale occupée par le widget NoteBook est supérieure à la fenêtre racine d'origine (800x600) en raison du nombre d'onglets spécifié dans le premier cycle et du nombre d'étiquettes spécifié dans les deux cycles suivants. Cette figure montre celle des 20 onglets spécifiés, seuls 15 ont été placés dans la fenêtre principale et seulement 31 des 39 étiquettes spécifiées dans le premier onglet sont situées.


Figure 2

Le deuxième onglet à l'état initial ne montre que 16 étiquettes sur 28. La position des barres de défilement reste inchangée.


Figure 3

En déplaçant la barre de défilement inférieure vers la droite, vous pouvez voir que la fenêtre principale couvre non seulement tous les onglets du widget NoteBook, mais aussi toutes les étiquettes placées dans le deuxième onglet.


Exemple No.2 - Le widget ScrolledWindow se trouve à l'intérieur de chaque onglet du widget NoteBook.

#!/usr/bin/python

import Tix as tx

root=tx.Tk()
root.geometry("800x600+0+10")

swm = []

nb=tx.NoteBook(root)
nb.pack(fill=tx.BOTH, expand=1)

for i in range(1,21):
	nb.add("tab"+str(i),label="Tab "+str(i))
	sw=tx.ScrolledWindow(eval("nb.tab"+str(i)))
	swm.append(sw)
	sw.pack(fill=tx.BOTH, expand=1)

for k in range(1,39):
	l=tx.Label(swm[0].window,text="label "+str(k))
	l.pack()

for k in range(1,29):
	l=tx.Label(swm[1].window,text="label "+str(k))
	l.pack(side=tx.LEFT)

root.mainloop()

Le résultat du scénario No.2 peut être vu dans les trois figures suivantes:


Figure 4

La vue initiale de l'application No.2 après le lancement. La barre de défilement apparaît uniquement à droite dans l'onglet Tab1, puisque le nombre de marques verticales est supérieur à la taille d'origine de la fenêtre principale.


Figure 5

Le deuxième onglet affiche uniquement la barre de défilement inférieure, car dans cet onglet, les étiquettes sont positionnées horizontalement.


Figure 6

En déplaçant la barre de défilement vers la droite, vous pouvez voir toutes les étiquettes à la fin de la fenêtre, mais vous ne pouvez pas accéder aux onglets avec des nombres supérieurs à 15. Ainsi, dans la variante No.2, les barres de défilement n'offrent l'accès que dans l'onglet. Si le nombre d'onglets est supérieur à celui placé dans la taille horizontale de la fenêtre principale, il n'y aura plus d'accès.

Par conséquent, si le nombre d'onglets du widget NoteBook n'est pas trop important pour dépasser les limites d'affichage de la fenêtre principale, la variante considérée de l'emplacement du widget ScrolledWindow est tout à fait acceptable.

Tenter d'unifier les deux variantes a donné le même résultat que l'Exemple No.1, car la fenêtre de widget de ScrolledWindow se développe aux tailles maximales occupées par les objets qui y sont placés.

J'espère que ces exemples vous aideront à concevoir vos applications de fenêtre dans Python.

Oleksii Tolkachov (ORCID ID: 0000-0002-4835-0507), Kiev, 30.08.2017.

À la principale À propos du symbole