Øving 5 – Oppgave 6
** GUI og objekter **
En lærer ønsker et program som beregner total poengsum i et fag. Elevene har fått bokstavkarakter (A-F) på 10 innleveringer, og grensen for å få bestått faget er 35 poeng. Hjelp læreren å skrive programmet.
Lag et GUI i Tkinter som læreren kan bruke. Programmet skal gjøre følgende:
- Opprette en klasse «elever» som har instanser med attributter som representerer eleven, total poengsum og status for bestått i faget
- Ta inn et navn eller en id på eleven
- Ta inn 10 bokstavkarakterer fra A-F i hver sin widget
- Ut fra bokstavkaraterene, regne ut total poengsum for faget (A = 6 poeng, F = 0 poeng)
- Lage en ny instans for eleven, som inneholder total poengsum og status for om faget er bestått eller ikke for faget
- Gi beskjed til læreren, i GUI’et, om hva total poengsum var
- Gi beskjed til læreren, i GUI’et, om faget var bestått eller ikke
Løsningsforslag:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 | ## Oppgave 6 svar import tkinter class elever: def __init__( self , navn, poengTot, bestatt): self .navn = navn self .poengTot = poengTot self .bestatt = bestatt # Funksjon som sender infoen fra GUI-et til elev-instans. def nyElev(): navn = navnInput.get() poengsum, bestatt = poeng() elevList.append(elever(navn, poengsum, bestatt)) for i in elevList: elevList.append(elev.navn, elev.bestatt, elev.poengTot) # Funksjon som regner ut total poengsum og returnerer bestått-info def poeng(): poengList = [] poengsum = 0 bestatt = '' for i in karList: kar = (i.get()) poengList.append(kar) for i in poengList: if i.upper() = = 'A' : poengsum + = 6 elif i.upper() = = 'B' : poengsum + = 4.8 elif i.upper() = = 'C' : poengsum + = 3.6 elif i.upper() = = 'D' : poengsum + = 2.4 elif i.upper() = = 'E' : poengsum + = 1.2 bestatt = 'Nei' if poengsum > = 35 : bestatt = 'Ja' return poengsum, bestatt def clear(): navnInput.delete( 0 , 'end' ) for i in karList: i.delete( 0 , 'end' ) ### GUI ### # Definerer hovedvinduet main_window = tkinter.Tk() elevList = [] karList = [] # Definerer navn-widget navnLbl = tkinter.Label(main_window, text = 'Elev' ) navnInput = tkinter.Entry(main_window, width = 10 ) png = poeng()[ 0 ] best = poeng()[ 1 ] # Definerer område der poeng og status for bestått skal vises totPoengLbl = tkinter.Label(main_window, text = 'Poengsum ' + str (png)) bestattLbl = tkinter.Label(main_window, text = 'Bestått status ' + str (best)) # Definerer knapper sendBtn = tkinter.Button(main_window, text = 'Send' , command = nyElev) resetBtn = tkinter.Button(main_window, text = 'Clear' , command = clear) quitBtn = tkinter.Button(main_window, text = 'Quit' , command = main_window.destroy) # Pack'er alt navnLbl.pack() navnInput.pack() # Definerer widgets for hvert karakter-område og pack'er for i in range ( 1 , 11 ): karLbl = tkinter.Label(main_window, text = 'Karakter ' + str (i)) i = tkinter.Entry(main_window, width = 5 ) karLbl.pack() karList.append(i) i.pack() totPoengLbl.pack() bestattLbl.pack() sendBtn.pack() resetBtn.pack() quitBtn.pack() # Kjører GUI-et tkinter.mainloop() |