Come creare una finestra Tkinter con dimensione costante

La dimensione della finestra di Tkinter è di default ridimensionabile anche se si assegna la larghezza e l’altezza quando l’istanza della finestra viene avviata.

import tkinter as tk

app = tk.Tk()

app.geometry('200x200')

app.mainloop()

Si può trascinare la finestra creata con i codici di cui sopra per ottenere diverse dimensioni di finestra. La funzione resizable dovrebbe essere usata per limitare la dimensione della larghezza e dell’altezza.

import tkinter as tk

app = tk.Tk()

app.geometry('200x200')
app.resizable(width=0, height=0)

app.mainloop()

app.resizable(width=0, height=0) non permette di ridimensionare sia la larghezza che l’altezza.

Impostare il frame con una dimensione costante

La cornice all’interno della finestra è un po’ simile alla finestra, nel senso che si ridimensiona automaticamente anche se si definisce la larghezza e l’altezza di quella cornice.

import tkinter as tk

app = tk.Tk()

app.geometry('200x200')
app.resizable(0, 0)

backFrame = tk.Frame(master=app,
                    width=200,
                    height=200,
                    bg='blue').pack()

button1 = tk.Button(master=backFrame, 
                    text='Button 1', 
                    bg='blue', 
                    fg='red').pack()
button2 = tk.Button(master=backFrame, 
                    text='Button 2', 
                    bg='blue', 
                    fg='green').pack()
button3 = tk.Label(master=backFrame, 
                   text='Button 3', 
                   bg='red',
                   fg='blue').pack()

app.mainloop()

L’interfaccia grafica è come quella che ci aspettavamo,

Telaio Tkinter non ridimensionabile

Ma quello che otteniamo dopo l’esecuzione dei codici di cui sopra è,

Telaio Tkinter Resizable

Il frame backFrame si ridimensiona automaticamente per adattarsi ai widget ad esso collegati. O in altre parole, i widget all’interno di backFrame controllano la dimensione del frame padre.

Si potrebbe disabilitare il frame per ridimensionarlo ai suoi widget impostando pack_propagate(0).

Il codice corretto per congelare la dimensione del frame è,

import tkinter as tk

app = tk.Tk()

app.geometry('200x200')
app.resizable(0, 0)

backFrame = tk.Frame(master=app,
                    width=200,
                    height=200,
                    bg='blue')
backFrame.pack()
backFrame.propagate(0)

button1 = tk.Button(master=backFrame, 
                    text='Button 1', 
                    bg='blue', 
                    fg='red').pack()
button2 = tk.Button(master=backFrame, 
                    text='Button 2', 
                    bg='blue', 
                    fg='green').pack()
button3 = tk.Label(master=backFrame, 
                   text='Button 3', 
                   bg='red',
                   fg='blue').pack()

app.mainloop()

Articolo correlato - Tkinter Geometry

  • Come creare una finestra a schermo intero in Tkinter