From 6109cf546d73a5cfe3628b1c7da01daf9ae13e5f Mon Sep 17 00:00:00 2001 From: Nils Tesdal <nils.tesdal@ntnu.no> Date: Tue, 19 Sep 2017 18:42:16 +0200 Subject: [PATCH] Update gui.md --- gui.md | 35 +++++++++++++++++------------------ 1 file changed, 17 insertions(+), 18 deletions(-) diff --git a/gui.md b/gui.md index eb47c6e..83bd984 100644 --- a/gui.md +++ b/gui.md @@ -13,14 +13,6 @@ # Om leksjonen Vi skal ikke gå i dybden på grafiske brukergrensesnitt, men dere skal lære de aller mest nødvendige mekanismene og deretter skal dere få en eksempelapplikasjon som dere kan bruke som utgangspunkt for oppgaven i denne leksjonen og gjerne i prosjektet. -```python -scrollbar = Scrollbar(root, orient=VERTICAL) -listbox = Listbox(root, yscrollcommand=scrollbar.set) -scrollbar.config(command=listbox.yview) -elements = ["egg","bacon","pølser"] -for element in elements: - listbox.insert(END, element) -``` # tkinter @@ -48,18 +40,19 @@ 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. +GUI-applikasjoner er bygd opp rundt *hendelser* (event). + +Eksempler på hendelser: +* En bruker trykker på en knapp med musepekeren +* En bruker trykker på en knapp ved hjelp av tastaturtrykk +* En bruker velger et meny-element med musa eller med tastetrykk +* En bruker dobbeltklikker i en liste +* En bruker velger et element i en liste med et enkelt trykk +* En bruker endrer innholdet i et tekstfelt -* 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: +Vi kan f.eks lage en knapp (Button) og si at funksjonen *update_data()* skal kjøres når vi trykker på den: ```python knapp = Button(root, text="Oppdater", command=update_data) @@ -71,9 +64,14 @@ Da må denne funksjonen lages og vi må skrive koden som skal kjøres i funksjon def update_data(): # Oppdater data i databasen ``` +Vi kan lage et menyelement med en tekst("Se statistikk") og en funksjon (*view_statistics()*)som skal kjøres når dette velges av brukeren: + +```python +menu.add_command(label="Se statistikk", command=view_statistics) +``` For knapper og menyelementer er det som regel bare en hendelse vi er interessert i, nemlig at brukeren velger dem, og derfor er det enkelt å definere hva som skal skje ved å bruke `command=?`. -I en listeboks kan det være flere typer hendelser vi er interessert i, f.eks dobbeltklikk. Vi kan *binde opp* hendelser til aksjoner med `bind(hendelse, funksjon)`. I eksempelet under sier vi at funksjonen `edit_person()` skal kjøres når vi dobbeltklikkier på et element i listeboksen. Dette eksempelet finner du også i eksempelapplikasjonen under. +I en listeboks kan det være flere typer hendelser vi er interessert i, f.eks dobbeltklikk. Da kan vi *binde opp* hendelser til aksjoner med `bind(hendelse, funksjon)`. I eksempelet under sier vi at funksjonen *edit_person()* skal kjøres når vi dobbeltklikkier på et element i listeboksen. Dette eksempelet finner du også i eksempelapplikasjonen under. ```python result_listbox.bind('<Double-Button-1>', edit_person) @@ -115,6 +113,7 @@ ledetekst = Label(root, text="Søk: ") * Menyer. En meny (Menu) kan inneholde flere meny-elementer med en kommando (command) for hvert element som peker på hvilken funksjon som skal kjøres når elementet velges. Se i *person_main.py* i eksempelprogrammet for å se hvordan vi lager disse. * Lister (Listbox). Lister er litt mer kompliserte da vi gjerne trenger en *scrollbar*. Vi oppretter en *Scrollbar* og en *Listbox* hver for seg og knytter dem sammen. I tillegg må vi legge til elementene i lista en og en. Bruk eksempelapplikasjonen som utgangspunkt for å bruke disse da det er litt komplisert. + ```python scrollbar = Scrollbar(root, orient=VERTICAL) listbox = Listbox(root, yscrollcommand=scrollbar.set) -- GitLab