Skip to content
Snippets Groups Projects
Commit 7d35358d authored by Nils Tesdal's avatar Nils Tesdal
Browse files

Update gui.md

parent 6109cf54
No related branches found
No related tags found
No related merge requests found
......@@ -84,11 +84,14 @@ Dette er spesielle typer variabler som brukes sammen med *widgets*. Fordelen med
I tillegg til *StringVar* har vi *IntVar* og *BooleanVar* og *DoubleVar*. Hvis datatypen til tekstfeltet du bruker ikke er en streng, men for eksempel en *int*, lønner det seg å bruke *IntVar* istedet. Da slipper du å konvertere mellom tall og strenger. Sjekk ut *alder*-feltet i eksempelapplikasjonen som bruker en *IntVar*.
Prosessen er som følger:
* Vi oppretter en StringVar
* Vi *kan* sette en utgangsverdi på denne
* Vi oppretter en StringVar (`tekst = StringVar()`)
* Vi *kan* sette en utgangsverdi på denne (`teskt.set("Verdi")`)
* 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.
```python
Bruk eksempelapplikasjonen for å se hvordan dette gjøres i praksis.
# Widgets
......@@ -96,17 +99,20 @@ Bruk eksempelapplikasjonen for å se hvordan dette gjøres i praksis.
En *widget* er en GUI-element vi bruker for å vise frem data og/eller for å la brukeren legge inn data. Eksempler disse er:
* Knapper (Button). En knapp opprettes som regel med en linje kode som sier hvilket vindu det skal være i (root), hva som skal stå knappen ("Søk"), og hvilken funksjon som skal kjøres når brukeren trykker den (vis_tekst):
```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 (tekst). Også her angir vi hvilket vindu det skal være i (root), 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 også inneholde et bilde (dette gjøres i eksempelapplikasjonen). Her er et eksempel med ledeteksten "Søk: ":
```python
ledetekst = Label(root, text="Søk: ")
```
......@@ -124,6 +130,7 @@ for element in elements:
```
* Nedrekksmeny (OptionMenu). En nedtrekksmeny trenger en StringVar for å holde på *valgt* verdi og en liste som angir hvilke valg som er mulige. Ofte vil det være aktuelt å hente denne listen fra en database.
```python
chosen = StringVar()
chosen.set("egg")
......@@ -172,6 +179,8 @@ root.mainloop()
![](images/Tkinter1.png)
Rutenettet som ble brukt i dette eksempelet har t kolonner og to rader:
![](images/Tkinter2.png)
I tillegg kan vi si at det skal være 10 piksler foran og etter ledeteksten og 3 piksler over og under både ledeteksten og tekstfeltet:
......@@ -197,7 +206,7 @@ Dere kan kjøre applikasjonen ved å ha *person_main.py* fremme i Thonny og så
* Sette inn eget brukernavn og passord helt øverst i filen *person_db.py*.
* Installere følgende biblioteker i Thonny hvis de ikke allerede er der: *matplotlib* og *numpy*.
Applikasjonen har 4 kodefiler. Kort oppsummert gjør de føløgende:
Applikasjonen har 4 kodefiler. Kort oppsummert gjør de følgende:
* *person_main.py*: Dette er hovedfilen i applikasjonen og det er denne vi må ha fremme i Thonny for å starte applikasjonen. Filen inneholder hovedvinduet i applikasjonen, med widget'er og funksjonene som skal kjøres når vi trykker på *Søk* eller velger menyfunksjoner.
* *person_edit.py*: Denne filen innholder vinduet vi bruker for å endre **en** person eller opprette en ny. Den har widget'er for navn, adresse, alder osv., og det er mulig å laste opp et bilde for hver person.
* *person_db.py*: Denne filen inneholder all databasefunksjonalitet i applikasjonen. Her finner vi funksjoner for å søke på personer, for å oppdatere, opprette og slette personer, og for å finne statistikk om personer.
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment