Fortsättning tkinter, messagebox och grid
messagebox – visa popup-meddelanden
Ibland vill vi inte bara visa text i en etikett – vi kanske vill visa ett popup-fönster, t.ex. när användaren skickar ett formulär, gör fel eller får ett resultat.
Det gör vi med messagebox, som finns i tkinter.messagebox.
import tkinter as tk
from tkinter import messagebox
root = tk.Tk()
root.title("Popup-exempel")
def visa_popup():
messagebox.showinfo("Meddelande", "Du klickade på knappen!")
knapp = tk.Button(root, text="Visa popup", command=visa_popup)
knapp.pack()
root.mainloop()Vanliga popup-typer:
| Funktion | Beskrivning |
|---|---|
showinfo(titel, meddelande) | Vanligt informationsfönster |
showwarning(titel, meddelande) | Gul triangel – varning |
showerror(titel, meddelande) | Rött kryss – felmeddelande |
askyesno(...) | Ger True/False beroende på användarens val |
Exempel:
if messagebox.askyesno("Bekräfta", "Vill du verkligen avsluta?"):
root.destroy()grid – placera saker i rutnät
Hittills har vi använt pack() för att lägga widgets under varandra. Det är enkelt, men ger lite kontroll.
Med grid() kan vi placera saker i rader och kolumner, ungefär som i en tabell.
Exempel – Enkel formulärlayout med grid():
import tkinter as tk
root = tk.Tk()
root.title("grid()-exempel")
tk.Label(root, text="Namn:").grid(row=0, column=0)
entry_namn = tk.Entry(root)
entry_namn.grid(row=0, column=1)
tk.Label(root, text="Ålder:").grid(row=1, column=0)
entry_alder = tk.Entry(root)
entry_alder.grid(row=1, column=1)
def visa_info():
namn = entry_namn.get()
alder = entry_alder.get()
tk.messagebox.showinfo("Information", f"{namn} är {alder} år gammal")
knapp = tk.Button(root, text="Visa info", command=visa_info)
knapp.grid(row=2, column=0, columnspan=2, pady=10)
root.mainloop()Notera: columnspan=2 gör att knappen täcker båda kolumnerna
Sammanfattning grid():
| Egenskap | Beskrivning |
|---|---|
row, column | Placering i tabell |
padx, pady | Avstånd till andra widgets |
sticky | Justering i cell (t.ex. "w" för vänster) |
columnspan | Breder ut sig över flera kolumner |
Vanliga tkinter-komponenter och inställningar
| Widget / metod | Beskrivning / användning | Exempel |
|---|---|---|
Label | Visar text i fönstret | Label(root, text="Hej") |
Entry | En rad där användaren kan skriva text | Entry(root) |
Button | Skapar en klickbar knapp | Button(root, text="Klicka", command=func) |
.pack() | Automatisk placering (enkelt) | widget.pack() |
.grid(row=, column=) | Placering i rutnät (mer kontroll) | widget.grid(row=0, column=1) |
.get() | Hämtar text från Entry | entry.get() |
.config(...) | Ändrar egenskaper i efterhand | label.config(text="Ny text") |
fg | Färg på texten | Label(..., fg="red") |
bg | Bakgrundsfärg | Label(..., bg="lightgray") |
font=("Font", storlek) | Ändrar textstil och storlek | Label(..., font=("Arial", 14)) |
command=namn_på_funktion | Vad som ska hända när en knapp klickas | Button(..., command=min_funktion) |
pady, padx | Avstånd runt widget (padding) | widget.pack(pady=10) |