17 Tarkvaraprototüübi näiteprogrammid

Tarkvaraarendusest

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 repositoorium

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

 

Litsents

Icon for the Creative Commons Attribution 4.0 International License

Tarkvaraarendus on loodud Eno Tõnisson, Tauno Palts, Kaarel Tõnisson, Merilin Säde jt poolt Creative Commons Attribution 4.0 International License litsentsi alusel, kui pole teisiti märgitud.

Jaga seda raamatut