Python Language
Tkinter
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!