PythonPodcast 14 - itnett/FTD02H-N GitHub Wiki

Episode 14 – Avanserte Widgets og Flere Vinduer i Tkinter


Velkommen til Episode 14!

I denne episoden skal vi bygge videre på GUI-programmering med Tkinter. Vi skal utforske mer avanserte widgets (grensesnittkomponenter) og lære hvordan man kan håndtere flere vinduer i en applikasjon. Dette vil gi oss muligheten til å skape mer dynamiske og interaktive applikasjoner.


Oppsummering fra forrige episode

I forrige episode, Episode 13, lærte vi:

  1. Hvordan lage et grunnleggende vindu med Tkinter.

  2. Hvordan legge til knapper, tekstfelt, og håndtere brukerinput.

  3. Hvordan håndtere hendelser som museklikk.

  4. Hvordan lage en enkel kalkulator med GUI.


Dagens Agenda

  1. Introduksjon til avanserte widgets i Tkinter.

  2. Bruke frames for organisering av layout.

  3. Håndtere flere vinduer i applikasjoner.

  4. Praktisk oppgave: Lage en enkel flervindu-applikasjon.

  5. Oppsummering og neste steg.


Avanserte Widgets i Tkinter

Tkinter tilbyr en rekke widgets utover bare knapper og tekstfelt. Noen av de avanserte og nyttige widgets vi skal se på inkluderer:

  1. Checkbutton – lar brukeren velge mellom på og av (avkryssingsboks).

  2. Radiobutton – lar brukeren velge ett alternativ fra en gruppe valg.

  3. Scale – en glidebryter som lar brukeren velge en verdi innenfor et område.

  4. Listbox – lar brukeren velge ett eller flere elementer fra en liste.

  5. Scrollbar – en rullefelt for å bla gjennom lange innholdslister.

La oss se hvordan vi kan bruke noen av disse i praksis.


Eksempel: Checkbutton og Radiobutton

import tkinter as tk

Funksjon for å vise valgt kjønn

def vis_kjonn(): valg = kjonn.get() if valg == 1: label.config(text="Du valgte: Mann") else: label.config(text="Du valgte: Kvinne")

Opprett hovedvindu

vindu = tk.Tk() vindu.title("Checkbutton og Radiobutton")

Checkbutton

show_password = tk.IntVar() check = tk.Checkbutton(vindu, text="Vis passord", variable=show_password) check.pack()

Radiobutton for valg av kjønn

kjonn = tk.IntVar() radiobutton1 = tk.Radiobutton(vindu, text="Mann", variable=kjonn, value=1, command=vis_kjonn) radiobutton2 = tk.Radiobutton(vindu, text="Kvinne", variable=kjonn, value=2, command=vis_kjonn) radiobutton1.pack() radiobutton2.pack()

Label for å vise resultat

label = tk.Label(vindu, text="Velg kjønn") label.pack()

vindu.mainloop()

I dette eksemplet har vi to radioknapper som lar brukeren velge kjønn, og vi bruker en checkbutton for å la brukeren velge om de vil vise passord eller ikke. Når brukeren velger et alternativ, oppdateres teksten i Label-elementet.


Bruke Frames for Layout

Frames er en viktig komponent i Tkinter som lar oss organisere widgets i logiske grupper. Det gjør det lettere å bygge komplekse brukergrensesnitt med flere elementer.

Her er et eksempel på hvordan vi kan bruke frames:

import tkinter as tk

vindu = tk.Tk() vindu.title("Eksempel med Frames")

Øvre ramme (frame)

top_frame = tk.Frame(vindu) top_frame.pack()

Nedre ramme (frame)

bottom_frame = tk.Frame(vindu) bottom_frame.pack(side=tk.BOTTOM)

Knapper i de ulike rammene

knapp1 = tk.Button(top_frame, text="Knapp 1", fg="red") knapp1.pack(side=tk.LEFT)

knapp2 = tk.Button(top_frame, text="Knapp 2", fg="blue") knapp2.pack(side=tk.LEFT)

knapp3 = tk.Button(bottom_frame, text="Knapp 3", fg="green") knapp3.pack(side=tk.LEFT)

vindu.mainloop()

Her bruker vi to frames for å organisere knappene i to seksjoner i vinduet. Frames hjelper oss med å lage mer ryddige og strukturerte grensesnitt.


Håndtere Flere Vinduer i Tkinter

Noen ganger kan det være nyttig å ha flere vinduer åpne i en applikasjon. Dette kan vi enkelt gjøre i Tkinter ved å lage flere vinduer ved hjelp av Toplevel-klassen.

Her er et eksempel på hvordan du kan åpne et nytt vindu fra hovedvinduet:

import tkinter as tk

def nytt_vindu(): # Opprett et nytt vindu nytt = tk.Toplevel() nytt.title("Nytt Vindu") label = tk.Label(nytt, text="Dette er et nytt vindu") label.pack()

Hovedvindu

vindu = tk.Tk() vindu.title("Flere Vinduer")

Knapp for å åpne nytt vindu

knapp = tk.Button(vindu, text="Åpne nytt vindu", command=nytt_vindu) knapp.pack()

vindu.mainloop()

Her bruker vi Toplevel til å åpne et nytt vindu når brukeren trykker på knappen. Dette lar oss skape mer komplekse applikasjoner med flere funksjoner spredt over flere vinduer.


Praktisk Oppgave: En Enkel Flervindu-applikasjon

Nå skal vi lage en applikasjon der brukeren kan registrere informasjon i ett vindu og få resultatet vist i et annet vindu.

import tkinter as tk

def registrer_bruker(): # Hent inndata fra feltene navn = navn_felt.get() alder = alder_felt.get()

# Åpne et nytt vindu for å vise informasjonen
nytt_vindu = tk.Toplevel()
nytt_vindu.title("Registrert Informasjon")

info = tk.Label(nytt_vindu, text=f"Navn: {navn}\nAlder: {alder}")
info.pack()

Hovedvindu

vindu = tk.Tk() vindu.title("Brukerregistrering")

Navn og alder felt

navn_felt = tk.Entry(vindu, width=30) navn_felt.pack(pady=5) alder_felt = tk.Entry(vindu, width=30) alder_felt.pack(pady=5)

Knapp for å registrere bruker

knapp = tk.Button(vindu, text="Registrer", command=registrer_bruker) knapp.pack(pady=10)

vindu.mainloop()

Her lager vi en enkel brukerregistrering-applikasjon med to vinduer. Når brukeren trykker på knappen, åpnes et nytt vindu som viser informasjonen de har skrevet inn i hovedvinduet.


Oppsummering

I denne episoden har vi lært:

  1. Hvordan bruke avanserte widgets som Checkbutton og Radiobutton.

  2. Hvordan bruke frames for å organisere layouten i et vindu.

  3. Hvordan håndtere flere vinduer ved å bruke Toplevel.

  4. Vi laget en flervindu-applikasjon som registrerer brukerens informasjon.


Neste Episode

I neste episode skal vi utforske hvordan vi kan koble Tkinter-applikasjoner med