Oppg-5-6

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