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