Ø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:
## 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()