Hoe maak je een Tkinter-venster met een constante grootte

Jinku Hu 25 juni 2020 20 december 2019
Hoe maak je een Tkinter-venster met een constante grootte

De Tkinter-venstergrootte kan standaard worden aangepast, zelfs als u de breedte en hoogte toewijst wanneer de vensterinstantie wordt gestart.

import tkinter as tk

app = tk.Tk()

app.geometry('200x200')

app.mainloop()

Je kan het venster slepen dat met de bovenstaande codes is gemaakt om verschillende vensters te krijgen. resizable functie moet worden gebruikt om de breedte en hoogte te beperken.

resizable(self, width=None, height=None) - Instrueer de window manager of deze breedte kan worden aangepast in WIDTH of HEIGHT. Beide waarden zijn booleaanse waarden.

import tkinter as tk

app = tk.Tk()

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

app.mainloop()

app.resizable(width=0, height=0) staat niet toe dat zowel de breedte als de hoogte worden aangepast.

Stel het frame in met een constante grootte

Het frame in het venster lijkt een beetje op het venster, in die zin dat het automatisch de grootte wijzigt, zelfs als u de breedte en hoogte van dat frame definieert.

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

De GUI die we verwachtten is hieronder,

Tkinter-frame kan niet worden gewijzigd

Maar wat we krijgen na het uitvoeren van de bovenstaande codes is,

Tkinter Frame aanpasbaar

De backFrame grootte van het frame wordt automatisch aangepast aan de widgets die eraan zijn gekoppeld. Of met andere woorden, de widgets binnenin backFrame bepalen de grootte van het bovenliggende frame.

Je kan het frame uitschakelen om de grootte aan de widgets aan te passen door pack_propagate(0) in te stellen.

propagate(self, flag=['_noarg_']) - Stel de status in voor de verspreiding van geometrie-informatie. Een boolean argument specificeert of de geometrie-informatie van de slaves de grootte van deze widget zal bepalen. Als er geen argument wordt gegeven, wordt de huidige instelling geretourneerd.

De juiste code om de framegrootte te bevriezen is,

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

Gerelateerde Artikelen - Tkinter Geometry