Labb 4 - Eventdriven GUI-programmering
Syfte med denna labb
Syftet med denna labb är att ni ska få öva er i att skapa ett GUI och att läsa dokumentation.
Översikt
- I denna labb ska ni använda en sagogenerator som finns i filen storygenerator.py. Ni behöver inte redigera denna fil.
- Ni ska implementera ett gränssnitt i Tkinter/Python som kommunicerar med sagogeneratorn och genererar visar den saga som genereras när ni ändrar på en parameter via gränssnittet.
Specifikation
Nedan finns en wireframe som visar hur gränssnitet till sagogeneratorn ska se ut.

När man ändrar på ett värde i gränssnittet, ska sagan genereras på nytt och visas i text-komponenten till höger. Knappen reset, ska återställa alla värden till det de var från början (ni får bestämma vilka).
Händelser att reagera på
Ni kommer att behöva lyssna efter olika händelser beroende på vilket widget som informationen kommer ifrån. Nedan följer en lista på widgets och hur ni lyssnar på vad ändringar i deras värden:
- Entry: lyssna på eventet
<KeyRelease>, dvs när användaren släpper en tangent. Se entry.py. - Combobox och Checkbox: Lyssna efter ändringar i variabeln som de lagrar informationen i genom att koppla ett funktionsobjekt till variabeln genom att använda metoden
trace(). Se combo.py och checkbox.py - Radiobutton: Ange ett kommando (funktionsobjekt) när du skapar radioknappen. Se radio.py.
- Button: Ange ett kommando (funktionsobjekt) när du skapar radioknappen. Se button.py.
Sätta texten i Text och Entry
Entry- och Text-widgetsarna är lite speciella i och med att de är gjorda så att man ska kunna ändra delar av texten. Man använder sig därför att en metod som tar en position och lägger till text innan denna position. Index för slutet av den text som finns i dessa widgets är lagrat i en variabel i modulen Tkinter. Har man importerat Tkinter och använt aliaset tk för den, skriver man tk.END för att referera till slutet.
Referenser att använda
Ni kommer behöva läsa er till en del information i denna labb. Syftet är att ni ska bekanta er med att söka upp information om hur nya moduler fungerar, samt att bekanta er med det sätt som dokumentation till moduler kan se ut. Fråga handledarna om ni har svårt att reda ut hur ni ska angripa informationen.
- An Introduction to Tkinter (Work in Progress)
- Tkinter 8.5 reference: a GUI for Python
- Visual Guide to Tkinter widgets
Genomförande
- Ladda ner sagogeneratorn och labbskelettet. Båda filer bör läggas i samma katalog.
- Fundera på hur ni ska layouta de olika komponenterna. Visa en skiss över detta (som ni t.ex. ritat för hand) för en handledare innan ni sätter igång med implementationen. Läs på om layout med
grid()innan ni börjar skissa så att ni förstår hurgrid()fungerar. - Börja med sedan med att skapa de widgets ni behöver och ordna deras layout. Ni kan titta på grid.py för ett enkelt exempel.
- Skapa en sagogenerator och visa den saga som genereras i text-widgeten.
- Koppla ihop komponenterna och generering av sagan genom att lyssna på events/koppla ihop kommandon till komponenterna.
Redovisning
- Labben redovisas genom att ni skickar alla filer via e-post till er labbhandledare. Lägg till era liu-id:n i slutet av filerna. T.ex.
labb4-liuid1-liud2.py. - Se till att cc:a er labbpartner.
- Använd följande ämnesrad: 729G06 Labb 4 abcde123 och qwert234 (där abcde123 och qwert234 ersätt med era liu-id:n). Genom att använda denna ämnesrad gör ni det lättare för er labbhandledare att hitta er inlämning! Vid komplettering, lägg till ett “kompl.” eller “komplettering”, och skicka inte in mer än en labb i samma e-post.
Sidansvarig: Jody Foo
Senast uppdaterad: 2013-01-16
