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!



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow