GUI-programmering med tkinter
Vad är ett GUI?
GUI står för Graphical User Interface – alltså ett grafiskt användargränssnitt.
Istället för att användaren skriver i terminalen, används knappar, textrutor, etiketter, menyer osv.
Exempel: kalkylatorn i Windows, en app med knappar eller ett bokningssystem med formulär.
Vad är tkinter?
tkinter är ett inbyggt Python-bibliotek för att skapa enkla GUI-program.
Du behöver inte installera något extra – det finns med i standard-Python.
Steg 1 – Skapa ett fönster
import tkinter as tk
root = tk.Tk()
root.title("Mitt första GUI")
root.mainloop()Förklaring:
tk.Tk()skapar själva huvudfönstret.title()sätter titeln i fönstrets kant.mainloop()startar gränssnittet – måste ligga sist
(programmet fortsätter “vänta” på användarens klick)
Steg 2 – Lägg till en etikett (Label)
import tkinter as tk
root = tk.Tk()
label = tk.Label(root, text="Hej och välkommen!")
label.pack()
root.mainloop()Förklaring:
Label()skapar en textetikettpack()placerar den i fönstret
Steg 3 – Lägg till en knapp (Button)
def klicka():
print("Knappen trycktes!")
button = tk.Button(root, text="Tryck här", command=klicka)
button.pack()command=klickakopplar knappen till en funktion- När knappen klickas → funktionen körs
Steg 4 – Textruta (Entry) + läsa indata
entry = tk.Entry(root)
entry.pack()
def visa_text():
text = entry.get()
print("Du skrev:", text)
knapp = tk.Button(root, text="Skriv ut", command=visa_text)
knapp.pack()Entry()= textruta för att mata in text.get()= hämta det användaren skrev
Steg 5 – Skriva ut text i GUI (inte i terminalen)
Hittills har vi använt print() för att skriva ut texten i terminalen, men i ett grafiskt program vill vi ofta att användaren ser svaret direkt i fönstret.
Det gör vi genom att uppdatera en Label med ny text.
import tkinter as tk
root = tk.Tk()
root.title("Skriv och visa")
root.geometry("300x200")
etikett1 = tk.Label(root, text="Skriv något:")
etikett1.pack()
entry = tk.Entry(root)
entry.pack()
# Denna etikett kommer vi uppdatera senare
resultat = tk.Label(root, text="", fg="blue")
resultat.pack()
def visa_text():
text = entry.get()
resultat.config(text="Du skrev: " + text)
knapp = tk.Button(root, text="Visa i fönstret", command=visa_text)
knapp.pack()
root.mainloop()Förklaring:
resultat = tk.Label(...)skapar en tom etikett där vi kan visa textenresultat.config(...)ändrar texten när vi klickar på knappenfg="blue"gör texten blå (valfritt)
Sammanfattning hittills
| Del | Vad det gör |
|---|---|
Label | Visar text i fönstret |
Entry | Låter användaren skriva in något |
Button | Kör en funktion när du klickar |
.get() | Hämtar text från en Entry |
.config() | Ändrar text eller egenskaper i en widget |
Dokumentation för tkinter
Officiell Python tkinter-dokumentation (svår men komplett):
https://docs.python.org/3/library/tkinter.html
TkDocs – nybörjarvänlig tkinter-guide:
https://tkdocs.com/tutorial/index.html
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) |