diff --git a/gui.md b/gui.md index 38ba2e55573c25c31824761c85e55000acc74e2b..e210a1478b49dccc79e4fbde288b8c497e2771a8 100644 --- a/gui.md +++ b/gui.md @@ -4,8 +4,8 @@ * [Tkinter](#tkinter) * [Vinduer](#vinduer) * [Hendelser](#hendelser) -* [Widgets](#widgets) * [StringVar](#stringvar) +* [Widgets](#widgets) * [Grid](#grid) * [Eksempelapplikasjon](#eksempelapplikasjon) * [Oppgaver](#oppgaver) @@ -40,13 +40,15 @@ Når vi kjører denne applikasjonen skal vi få opp et lite vindu uten noe innho # Hendelser +GUI-applikasjoner er bygd opp rundt *hendelser* (event). Hva er en hendelse (event) og hva bruker vi de til. Eksempler. * Museklikk * En bruker trykker på en knapp med musepekeren * Tastatur-trykk - +* Brukeren velger et meny-element +* En hendelse kan utløse (trigge) en aksjon. Dette er det vi som bestemmer ved at vi forteller Python hva som skal skje ved gitte hendelser. Vi kan lage en knapp (Button) og si at funksjonen *update_data()* skal kjøres når vi trykker på den: @@ -69,19 +71,43 @@ I en listeboks kan det være flere typer hendelser vi er interessert i, f.eks do result_listbox.bind('<Double-Button-1>', edit_person) ``` +# StringVar + +og IntVar og BooleanVar og DoubleVar + +Dette er spesielle typer variabler som brukes sammen med *widgets*. Fordelen med disse er at de blir automatisk oppdatert av Python når brukeren endrer innholdet av for eksempel et tekstfelt. + +Prosessen er som følger: +* Vi oppretter en StringVar +* Vi *kan* sette en utgangsverdi på denne +* Så oppretter vi f.eks et tekstfelt med denne variabelen. +* Når en bruker f.eks trykker på en knapp kjøres det en funksjon. Da kan denne funksjonen bruke StringVar variabelen for å bruke innholdet av tekstfeltet. + +Bruk eksempelapplikasjonen for å se hvordan dette gjøres i praksis. # Widgets -* Knapper (Button) -* Tekstfelter (Entry) +* Knapper (Button). En knapp opprettes som regel med en linje kode som sier hvilket vindu det skal være i, hva som skal stå på knappen, og hvilken funksjon som skal kjøres når brukeren trykker på den: +```python +knapp = Button(root, text="Søk", command=vis_tekst) +``` +* Tekstfelter (Entry). Et teksfelt opprettes gjerne med to linjer kode; en for å lage en StringVar som holder på innholdet og en for å lage tekstfeltet. Også her angir vi hvilket vindu det skal være i, i tillegg til hvilken StringVar som skal brukes: +```python +tekst = StringVar() # Definerer en tekstvariabel for tekstfeltet +tekstfelt = Entry(root, textvariable=tekst) +``` + * Ledetekst (Label) En Label inneholder vanligvis en ledetekst og brukes gjerne foran et tekstfelt (Entry). En *Label* kan imidlertid ogsp inneholde et bilde (dette gjøres i eksempelapplikasjonen) * Menyer. En meny (Menu) kan inneholde flere meny-elementer med en kommando for hvert element. * Lister (Listbox) * Nedrekksmeny (OptionMenu) -# StringVar - -bla bla +```python +chosen = StringVar() +chosen.set("egg") +options = ["egg","bunny","chicken"] +nedtrekksmeny = OptionMenu(root, chosen, *options) # Merk stjerna foran listevariabelen +``` # Grid