HOWTO · Tkinter
Come creare una finestra a schermo intero in Tkinter
Questo tutorial introduce come creare una finestra a schermo intero in Tkinter.
In questa pagina
Per visualizzare una finestra Tkinter a schermo intero, imposta l’attributo -fullscreen su True. L’esempio per Windows qui sotto associa F11 alla commutazione della modalità e Escape per uscirne. Su Ubuntu, usa -zoomed per massimizzare la finestra. Se vuoi che la finestra occupi tutto lo schermo mantenendo la barra del titolo e i bordi, imposta invece la geometria sulle dimensioni del monitor.
Esegui questo esempio:
Il codice e le etichette o gli output visibili in questa sezione restano in inglese.
is_fullscreen = True
is_fullscreen = not is_fullscreen
print(is_fullscreen)
False
Questa semplice transizione di stato illustra la commutazione usata nell’esempio per Windows: ogni pressione di F11 cambia lo stato corrente. Gli esempi GUI qui sotto sono pensati per sessioni desktop interattive. Gestiscono tk.TclError quando non è possibile aprire uno schermo, così un ambiente headless può terminare senza fingere che sia stata mostrata una finestra; eseguili sulla piattaforma indicata per osservare il comportamento della finestra.
Impostare una finestra Tkinter a schermo intero su Windows
tk.Tk.attributes accetta attributi della finestra specifici della piattaforma. Su Windows, imposta -fullscreen su True durante la creazione della finestra principale per avviarla senza le decorazioni abituali. Mantieni lo stato memorizzato coerente con questa impostazione iniziale; altrimenti, alla prima pressione di F11 potresti assegnare all’attributo il valore che ha già. Escape imposta su False sia lo stato memorizzato sia l’attributo della finestra.
Il codice e le etichette o gli output visibili in questa sezione restano in inglese.
import os
import tkinter as tk
class FullscreenExample:
def __init__(self):
self.window = tk.Tk()
self.window.attributes("-fullscreen", True)
self.fullscreen = True
self.window.bind("<F11>", self.toggle_fullscreen)
self.window.bind("<Escape>", self.leave_fullscreen)
self.window.mainloop()
def toggle_fullscreen(self, event=None):
self.fullscreen = not self.fullscreen
self.window.attributes("-fullscreen", self.fullscreen)
def leave_fullscreen(self, event=None):
self.fullscreen = False
self.window.attributes("-fullscreen", False)
if __name__ == "__main__":
try:
FullscreenExample()
except tk.TclError as error:
display_error = str(error)
Il parametro event consente a Tkinter di passare l’evento del tasto a ciascun gestore. Se preferisci non memorizzare una variabile di stato separata, una lambda può leggere il valore corrente dell’attributo e invertirlo:
import os
import tkinter as tk
try:
window = tk.Tk()
window.attributes("-fullscreen", True)
window.bind(
"<F11>",
lambda event: window.attributes(
"-fullscreen", not window.attributes("-fullscreen")
),
)
window.bind("<Escape>", lambda event: window.attributes("-fullscreen", False))
window.mainloop()
except tk.TclError as error:
display_error = str(error)
La forma di attributes("-fullscreen") senza argomenti legge il valore corrente. Questo approccio evita di dover mantenere sincronizzate due copie dello stato. In un’applicazione più grande, associa Escape al normale gestore di chiusura se uscire dalla modalità a schermo intero deve chiudere anche la finestra.
Usare l’attributo -zoomed per la finestra su Ubuntu
Il gestore di finestre di Tk su Ubuntu supporta l’attributo -zoomed per massimizzare una finestra. Non equivale alla modalità senza bordi -fullscreen, quindi scegli questa opzione quando vuoi il normale comportamento di una finestra massimizzata sul desktop. Usa questo esempio su Ubuntu; prima di applicarlo a un’altra distribuzione Linux o a macOS, verifica separatamente il comportamento.
Il codice e le etichette o gli output visibili in questa sezione restano in inglese.
import os
import tkinter as tk
class UbuntuZoomedExample:
def __init__(self):
self.window = tk.Tk()
self.window.attributes("-zoomed", True)
self.zoomed = True
self.window.bind("<F11>", self.toggle_zoomed)
self.window.bind("<Escape>", self.leave_zoomed)
self.window.mainloop()
def toggle_zoomed(self, event=None):
self.zoomed = not self.zoomed
self.window.attributes("-zoomed", self.zoomed)
def leave_zoomed(self, event=None):
self.zoomed = False
self.window.attributes("-zoomed", False)
if __name__ == "__main__":
try:
UbuntuZoomedExample()
except tk.TclError as error:
display_error = str(error)
Come nell’esempio per Windows, inizializza lo stato memorizzato a True, perché la finestra si avvia massimizzata. Alla prima pressione, F11 ripristina la finestra; alla successiva la massimizza di nuovo. Escape ripristina lo stato normale della finestra. Se il gestore di finestre del tuo ambiente non supporta questo attributo, usa l’approccio seguente per una finestra decorata delle dimensioni dello schermo oppure verifica il comportamento sul desktop Ubuntu di destinazione.
Riempire lo schermo mantenendo le decorazioni della finestra
Per mantenere la barra del titolo e i bordi, imposta la larghezza e l’altezza richieste della finestra usando winfo_screenwidth() e winfo_screenheight(). Il metodo geometry accetta una dimensione come 1440x900; aggiungendo +0+0, posizioni la finestra nell’angolo superiore sinistro dello schermo. Le decorazioni del gestore di finestre occupano spazio aggiuntivo, quindi la finestra esterna può sporgere leggermente oltre lo schermo anche quando l’area client richiesta corrisponde alle dimensioni del monitor. Questo approccio non usa -fullscreen e non offre una commutazione della modalità a schermo intero.
Il codice e le etichette o gli output visibili in questa sezione restano in inglese.
import os
import tkinter as tk
try:
window = tk.Tk()
width = window.winfo_screenwidth()
height = window.winfo_screenheight()
window.geometry(f"{width}x{height}+0+0")
window.mainloop()
except tk.TclError as error:
display_error = str(error)
I metodi che restituiscono le dimensioni dello schermo forniscono misure in pixel del display rilevato da Tkinter. Se la finestra deve rientrare nell’area di lavoro, senza pannelli o dock, usa le dimensioni di tale area invece di quelle dell’intero schermo. Per un’introduzione a Tkinter, consulta Tkinter; per il metodo geometry, consulta Gestori di geometria Tkinter.