Ricerca…


introduzione

Rilasciato in Tkinter è la libreria GUI (Graphical User Interface) più popolare di Python. Questo argomento spiega l'uso corretto di questa libreria e delle sue funzionalità.

Osservazioni

La capitalizzazione del modulo tkinter è diversa tra Python 2 e 3. Per Python 2 utilizzare quanto segue:

from Tkinter import *  # Capitalized

Per Python 3 usa il seguente:

from tkinter import *  # Lowercase

Per il codice che funziona con Python 2 e 3, puoi farlo

try:
    from Tkinter import *
except ImportError:
    from tkinter import *

o

from sys import version_info
if version_info.major == 2:
    from Tkinter import *
elif version_info.major == 3:
    from tkinter import *

Vedi la documentazione di tkinter per maggiori dettagli

Un'applicazione tkinter minimale

tkinter è un toolkit GUI che fornisce un wrapper attorno alla libreria GUI Tk / Tcl ed è incluso in Python. Il codice seguente crea una nuova finestra usando tkinter e inserisce del testo nel corpo della finestra.

Nota: in Python 2, le lettere maiuscole potrebbero essere leggermente diverse, vedere la sezione Note sotto.

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()

Geometry Manager

Tkinter ha tre meccanismi per la gestione della geometria: place , pack e grid .

Il place gestore utilizza coordinate assolute pixel.

Il gestore del pack inserisce i widget in uno dei 4 lati. I nuovi widget sono posizionati accanto ai widget esistenti.

Il gestore della grid posiziona i widget in una griglia simile a un foglio di calcolo con ridimensionamento dinamico.

Posto

Gli argomenti delle parole chiave più comuni per widget.place sono i seguenti:

  • x , la coordinata x assoluta del widget
  • y , la coordinata y assoluta del widget
  • height , l'altezza assoluta del widget
  • width , la larghezza assoluta del widget

Un esempio di codice che utilizza il 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()

pacco

widget.pack può prendere i seguenti argomenti di parole chiave:

  • expand , se riempire o meno lo spazio lasciato dal genitore
  • fill , se espandere per riempire tutto lo spazio (NESSUNO (predefinito), X, Y o ENTRAMBI)
  • side , il lato da imballare contro (TOP (predefinito), BOTTOM, SINISTRA o DESTRA)

Griglia

Gli argomenti delle parole chiave più utilizzati di widget.grid sono i seguenti:

  • row , la riga del widget (la più piccola di default non occupata)
  • rowspan , il numero di colonne che un widget si estende (predefinito 1)
  • column , la colonna del widget (default 0)
  • columnspan , il numero di colonne di un widget (predefinito 1)
  • sticky , dove posizionare il widget se la cella della griglia è più grande di essa (combinazione di N, NE, E, SE, S, SW, W, NW)

Le righe e le colonne sono indicizzate a zero. Le righe aumentano andando giù e le colonne aumentano andando a destra.

Un esempio di codice usando 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()

Non mischiare mai pack e grid nello stesso frame! Fare così porterà ad un deadlock dell'applicazione!



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow