Come creare una finestra Tkinter con dimensione costante

Jinku Hu 25 giugno 2020
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()
Autore: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

Articolo correlato - Tkinter Geometry