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:

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