19 Tarkvaraprototüübi näiteprogrammid
Tarkvaraarenduse kursuse ja ka õpiku saab tinglikult jaotada kaheks – klassikalised programmeerimise teemad ja tarkvaraarendus. Tarkvaraarenduse n-ö tööstuslikku vaadet käsitleme järgmises osas, siin aga on toodud näiteprogrammid, mis võivad aidata oma programme luua. Programmeerimise kursuste üks loomingulisemaid osi on kahtlemata ise ja omal teemal programmi koostamine. Kuna kursuse maht on väike, siis päris suurt tarkvara arendada ei jõua. Nimetagemgi siis loodavat programmi tarkvaraprototüübiks – kõik ei pruugi veel täies mahus toimida, aga aimu võimalikust lõpptulemusest juba saab.
Kursuse raames ja IT-tööstuses tarkvara loomise protsesside sarnasused ja erinevused on väga huvitav temaatika. Mis teil endal tööstusliku tarkvaraarendusega võrreldes sarnaselt või erinevalt läheb?
Näiteprogrammid Githubis
Githubi repositooriumis on toodud mõned terviklikud näiteprogrammid, mida võib kasutada nii ideeliseks inspiratsiooniks kui ka otseste koodinäidetena, mille komponente saab enda programmis kasutada. Programmide ehitus ning nende töö etapid on kirjeldatud repositooriumi README-failis.
Lühikesi koodinäiteid
Siin on toodud lühikesed näitekoodid, millest võib olla abi terviklike näiteprogrammide mõistmisel.
CSV-faili lugemine järjendisse
Ilma päiseta (veergude nimedeta)
Avame CSV-faili nimega minufail.csv
, kus igal real on semikoolonitega (sümbol “;”) eraldatud väärtused. Igast reast moodustub järjend, neid järjendeid hoiustame järjendis andmed
.
import csv failinimi = "minufail.csv" csv_fail = open(failinimi, encoding="UTF8") # Avame faili csv_reader = csv.reader(csv_fail, delimiter = ";") # Anname selle CSV lugejale, semikoolonit loeme eraldusmärgiks andmed = [] # Siia järjendisse kogume ridade järjendid ("andmed" on kahemõõtmeline järjend) for rida in csv_reader: # muutuja "rida" on järjend ühelt realt loetud väärtustest andmed.append(rida) csv_fail.close()
Koos päisega (veergude nimedega)
Kui CSV-faili esimesel real on veergude pealkirjad, siis tuleb need kuidagi ülejäänud andmetest eraldada. Üks viisidest on järgmine:
import csv failinimi = "minufail.csv" csv_fail = open(failinimi, encoding="UTF8") # Avame faili csv_reader = csv.reader(csv_fail, delimiter = ";") # Anname faili CSV lugejale, semikoolon eraldab väärtusi ridade_loendur = 0 andmed = [] for rida in csv_reader: # CSV lugeja teeb igast reast järjendi if ridade_loendur == 0: # Esimesel real on veergude nimed, hoiustame need eraldi print("veergude nimed:"+str(rida)) veergude_nimed = rida else: # Ülejäänud ridadel on andmed, hoiustame neid järjendis print("rea sisu:"+str(rida)) andmed.append(rida) ridade_loendur += 1 csv_fail.close()
Kahemõõtmelise järjendi läbimine
Kahemõõtmelise järjendi läbimiseks kasutame tavaliselt kahekordset tsüklit.
järjend = [[1,2,3],[4,5,6]] for rida in järjend: for väärtus in rida: print(väärtus)
Tkinteri kasutamine
Tkinteri graafikamoodul võimaldab detailselt kontrollida programmi graafilist poolt. Meie näidetes kasutame elementide paigutamiseks komponenti frame ning käsku pack, kuid tegelikult saab Tkinteriga elemente paigutada ka rohkematel viisidel.
Tkinteri programmid käivituvad käsuga mainloop().
Tuleb arvestada, et pärast mainloop
’i käivitamist Python edasiste ridadeni ei jõua, kuniks käivitatud juuraken alles on. Seetõttu on graafikaga programmi tööks vajalik kõik oluline käivitada sellest käsust eespool.
Elementide ilusaks paigutamiseks on tavaliselt vaja käsule pack()
anda sobivad argumendid. Geomeetriahalduri pack juhendist võib olla abi sobivate argumentide leidmisel.
Akna loomine
Tkinter vajab algatuseks juurakna loomist ning selle eraldi käivitamist.
import tkinter as tk root = tk.Tk() # Loome juurakna, millesse lisame hiljem muid graafikaelemente root.title("Pealkiri") # Anname juuraknale pealkirja #### # siia vahele käivad kõik tegevused, mida laseme graafikaliidesel teha #### root.mainloop() # Käivitame graafika. Siit edasi programmiridu ei käivitu, kuniks juuraken on alles
Sildi (teksti) lisamine
Silt (ingl label) on element, millega kuvada teksti. Sildi sisu on võimalik tagantjärgi muuta.
import tkinter as tk root = tk.Tk() # Loome juurakna, millesse lisame hiljem muid graafikaelemente root.title("Pealkiri") # Anname juuraknale pealkirja frame = tk.Frame(root) # Lisame juuraknale (nähtamatu) raamistiku, kuhu teisi elemente kinnitada frame.pack(side=tk.TOP) sildi_tekst = "Terekest." silt = tk.Label(frame, text=sildi_tekst) # Loome sildi meie määratud tekstiga, seostame selle meie raamistikuga silt.config(font=("Serif", 44)) # Muudame sildi fonti ning teksti suurust silt.pack(fill=tk.BOTH) # Paigaldame sildi (silt muutub nähtavaks) root.mainloop() # Käivitame graafika. Siit edasi programmiridu ei käivitu, kuniks juuraken on alles
Nupu lisamine
Nuppude lisamisel on vajalik nupule vajutamisel juhtuv tegevus defineerida eraldi funktsioonis.
import tkinter as tk def nupu_tegevus(): # Nupuga seotud tegevus peab olema loodud eraldi funktsioonina print("vajutatud") root = tk.Tk() # Loome juurakna, millesse lisame hiljem muid graafikaelemente root.title("Pealkiri") # Anname juuraknale pealkirja frame = tk.Frame(root) # loome raamistiku, kuhu nuppe paigutada frame.pack(side=tk.TOP) button = tk.Button(frame, text="Vajuta", fg="black", command=nupu_tegevus) # Loome nupu, mida vajutades käivitub funktsioon "nupu_tegevus" button.pack(side=tk.BOTTOM, fill=tk.X, padx=10, pady=10) # paigutame nupu: alla serva (side=tk.BOTTOM), x-teljel täitvalt(fill=tk.x), 10-pikslise servavahega root.mainloop() # Käivitame graafika. Siit edasi programmiridu ei käivitu, kuniks juuraken on alles