Python Language
tkinter
Recherche…
Introduction
Sorti dans Tkinter, il est la bibliothèque d'interfaces graphiques la plus populaire de Python. Cette rubrique explique l'utilisation correcte de cette bibliothèque et de ses fonctionnalités.
Remarques
La capitalisation du module tkinter est différente entre Python 2 et 3. Pour Python 2, utilisez ce qui suit:
from Tkinter import * # Capitalized
Pour Python 3, utilisez ce qui suit:
from tkinter import * # Lowercase
Pour le code qui fonctionne avec Python 2 et 3, vous pouvez soit faire
try:
from Tkinter import *
except ImportError:
from tkinter import *
ou
from sys import version_info
if version_info.major == 2:
from Tkinter import *
elif version_info.major == 3:
from tkinter import *
Voir la documentation de tkinter pour plus de détails
Une application tkinter minimale
tkinter
est une boîte à outils graphique qui fournit un wrapper autour de la bibliothèque d'interface graphique Tk / Tcl et est incluse avec Python. Le code suivant crée une nouvelle fenêtre à l'aide de tkinter
et place du texte dans le corps de la fenêtre.
Remarque: Dans Python 2, la capitalisation peut être légèrement différente, voir la section Remarques ci-dessous.
import tkinter as tk
# GUI window is a subclass of the basic tkinter Frame object
class HelloWorldFrame(tk.Frame):
def __init__(self, master):
# Call superclass constructor
tk.Frame.__init__(self, master)
# Place frame into main window
self.grid()
# Create text box with "Hello World" text
hello = tk.Label(self, text="Hello World! This label can hold strings!")
# Place text box into frame
hello.grid(row=0, column=0)
# Spawn window
if __name__ == "__main__":
# Create main window object
root = tk.Tk()
# Set title of window
root.title("Hello World!")
# Instantiate HelloWorldFrame object
hello_frame = HelloWorldFrame(root)
# Start GUI
hello_frame.mainloop()
Gestionnaires de géométrie
Tkinter dispose de trois mécanismes de gestion de la géométrie: place
, pack
et grid
.
Le gestionnaire de place
utilise des coordonnées de pixels absolues.
Le gestionnaire de pack
place les widgets sur l'un des 4 côtés. Les nouveaux widgets sont placés à côté des widgets existants.
Le gestionnaire de grid
place les widgets dans une grille similaire à une feuille de calcul à redimensionnement dynamique.
Endroit
Les arguments les plus courants pour widget.place
sont les suivants:
-
x
, la coordonnée x absolue du widget -
y
, coordonnée absolue du widget -
height
, la hauteur absolue du widget -
width
, la largeur absolue du widget
Un exemple de code utilisant place
:
class PlaceExample(Frame):
def __init__(self,master):
Frame.__init__(self,master)
self.grid()
top_text=Label(master,text="This is on top at the origin")
#top_text.pack()
top_text.place(x=0,y=0,height=50,width=200)
bottom_right_text=Label(master,text="This is at position 200,400")
#top_text.pack()
bottom_right_text.place(x=200,y=400,height=50,width=200)
# Spawn Window
if __name__=="__main__":
root=Tk()
place_frame=PlaceExample(root)
place_frame.mainloop()
Pack
widget.pack
peut prendre les arguments suivants:
-
expand
, remplir ou non l'espace laissé par le parent -
fill
, s'il faut développer pour remplir tout l'espace (NONE (par défaut), X, Y ou BOTH) -
side
, le côté à emballer contre (TOP (par défaut), BOTTOM, LEFT ou RIGHT)
la grille
Les arguments de mots-clés les plus utilisés de widget.grid
sont les suivants:
-
row
, la ligne du widget (la plus petite valeur par défaut inoccupée) -
rowspan
, le nombre de colonnes d'un widget (par défaut 1) -
column
, la colonne du widget (0 par défaut) -
columnspan
, le nombre de colonnes d'un widget (par défaut 1) -
sticky
, où placer le widget si la cellule de la grille est plus grande que cela (combinaison de N, NE, E, SE, S, SW, W, NW)
Les lignes et les colonnes sont indexées à zéro. Les rangs augmentent en baisse et les colonnes augmentent à droite.
Un exemple de code utilisant la grid
:
from tkinter import *
class GridExample(Frame):
def __init__(self,master):
Frame.__init__(self,master)
self.grid()
top_text=Label(self,text="This text appears on top left")
top_text.grid() # Default position 0, 0
bottom_text=Label(self,text="This text appears on bottom left")
bottom_text.grid() # Default position 1, 0
right_text=Label(self,text="This text appears on the right and spans both rows",
wraplength=100)
# Position is 0,1
# Rowspan means actual position is [0-1],1
right_text.grid(row=0,column=1,rowspan=2)
# Spawn Window
if __name__=="__main__":
root=Tk()
grid_frame=GridExample(root)
grid_frame.mainloop()
Ne mélangez jamais le pack
et la grid
dans le même cadre! Cela conduirait à une impasse de l'application!