Veľmi dôležité! Python je CASE-SENSITIVE! Je rozdiel medzi veľkými a malými písmenami (napr. b a B).
Texty vždy píšeme v úvodzovkách. Buď „text“ alebo ‘text’ → nikdy nie kombinácia dvojitá text jednoitá úvodzovka, musia byť rovnaké.
Obsah:
- Načítanie grafiky
- Základné grafické príkazy na kreslenie
- Ako môžeme zadávať súradnice
- Premenné (lokálne, globálne)
- Náhoda (modul random)
- For cyklus
- Jednoduchý časovač do for cykla
- Komentovanie
- Získavanie vstupu od používateľa v Shelli
- Vypísanie textu do Shellu
- Pretypovanie premennej
- Podprogramy/Funkcie/Procedúry
- Podmienky (if)
- Udalosti myši
- Udalosti klávesnice
- Pravý časovač používaný vo funkciách
- Posúvanie objektov canvasu (klávesom, časovačom)
- Entry a tlačidlo
- Cyklus s podmienkou – While
- Jednorozmerné polia
- Dvojrozmerné polia
- Práca s obrázkami – png a gif
- Problémy s obrázkami
- Try-except
- Textové súbory – zapisovanie a dopisovanie
- Textové súbory – čítanie
- Ťahák na turtle grafiku (modul turtle)
1. Načítanie grafiky:
import tkinter c = tkinter.Canvas() # alebo c = tkinter.Canvas(bg='white', width=1000, height=600) #bg je farba pozadia, šírka, výška c.pack()

2. Základné grafické príkazy na kreslenie:
c.create_line(x1,y1,x2,y2,x3,y3,...) |
nakreslí čiaru idúcu z bodu so súradnicami [x1,y1], do bodu [x2,y2], ďalej do bodu [x3,y3], prípadne ďalej do ďalších bodov |
c.create_line(x1,y1,x2,y2,width=5,fill='red') |
toto nastaví hrúbku čiary na 5 a jej farbu na červenú. Okrem základných môžete použiť aj nasledujúce farby: ‘orange’, ‘fuchsia’, ‘olive’, ‘skyblue’, a pod. |
c.create_rectangle(x1,y1,x2,y2) # fill='red', outline='red' |
nakreslí obdĺžnik/štvorec, ktorý bude mať ľavý horný roh v bode so súradnicami [x1,y1] a pravý dolný roh v bode so súradnicami [x2,y2] outline – zafarbí orámovanie útvaru |
c.create_rectangle(x1,y1,x2,y2,outline='blue') # fill='red', outline='red' |
outline nastaví farbu čiary na modrú |
c.create_oval(x1,y1,x2,y2) # fill='red', outline='red' |
nakreslí elipsu/kružnicu, ktorá bude vpísaná do obdĺžnika (preto vieme určiť x1,y1,x2,y2) s ľavým horným rohom v bode so súradnicami [x1,y1] a pravým dolným rohom v bode so súradnicami [x2,y2] |
c.create_polygon(x1,y1,x2,y2,x3,y3) # fill='red', outline='red' |
nakreslí polygón, ktorý môže byť aj vyfarbený (napríklad na kreslenie trojuholníka, 5,6,7,8,9-uholníka… vždy treba zadať pre každý bod aj x aj y) |
c.create_text(x,y,text='toto sa vypíše', font='Arial 70 bold',angle=90) # fill='red' |
vypíše text „toto sa vypíše“ na súradnici x,y (x,y sú presné súradnice stredu textu), parameter „font“ môže, no nemusí byť zadaný, parametrom „angle“ otočíme napísaný text o príslušný uhol (tiež to nie je povinný parameter) |
c.delete("all") |
zmazanie grafickej plochy (používa sa často práve vtedy, ak robíme s c.after(100) – c.update() ) |
3. Ako môžeme zadávať súradnice:

1. Ako súradnice si určíme ľavý horný (x1,y1) a pravý dolný roh (x2, y2) c.create_rectangle(x1,y1,x2,y2) 2. Ako súradnice si určíme ľavý dolný roh (x1, y1) a pravý horný roh (x2, y2) c.create_rectangle(x1,y1,x2,y2) 3. Na začiatku si určíme súradnice stredu štvorca x,y a polomer (polovicu strany štvorca). Potom vykresľujeme tak, že zdáme ľavý horný roh, ktorý bude mať súradnice (x-v, y-v) a pravý dolný roh, ktorý bude mať súradnice (x+v, y+v) x = 200 (napr.) y = 200 (napr.) v = 50 (napr.) c.create_rectangle(x-v,y-v,x+v,y+v)
4. Premenné:
Lokálne premenné:
nazovpremennej = hodnota #priradenie Zvyšovanie hodnoty premennej o hodnotu napr. 10; číselné premenné integer: a = 32 a = a + 10 #aká bude teraz hodnota premennej? a=32+10 → a bude mať hodnotu 42 Znižovanie hodnoty premennej o hodnotu napr. 10: a = 32 a = a - 10 #aká bude teraz hodnota premennej? a=32-10 → a bude mať hodnotu 22 Textové premenné - string: a = "slovo" Premenná s farbou: farba = "blue" Premenná s logickou hodnotou True/False: logika = True
Globálne premenné:
a = 10 b = "Ahoj" def nazovfunkcie(): global a global b # alebo spolu zapísať: global a, b # dalsie prikazy.... # premenné a b môžu byť definované aj tu nazovfunkcie()
5. Náhoda:
Načítanie náhodných čísiel – 2 spôsoby:
1.spôsob: from random import * a = randrange(10, 20) #nepíšeme random.randrange, ale iba príkaz bez toho, aj pri ostatných typoch b = randint(10,20) # príkazy fungujú rovnako v oboch prípadoch ale vždy si musíme vybrať, ktorý spôsob použijeme 2.spôsob: import random - vždy pred použitím musíme importovať knižnicu na náhodu a = random.randrange(10) - môže mať 1 alebo 2 vstupy - toto vypľuje náhodné číslo v rozmedzí 0-9 - random.randrange(10,20) - toto vypľuje náhodné číslo v rozmedzí 10-19 b = ramdom.randint(10,20) - musí mať 2 vstupy - toto vypľuje náhodné číslo v rozmedzí 10-20 farba = random.choice(('red', 'green', 'blue', 'black')) - náhodná farba - vyberie si zo 4 možností - dá sa aplikovať aj na niečo iné, náhoda si vyberie jedno z uvedených možností oddelených čiarkou cislo = random.choice([1, 2, 5, 10, 20, 50]) - vyberie si rôzne náhodné čísla pismeno = random.choice(["K", "I", "s", "u", "I", "á"]) - vyberie si rôzne náhodné písmená/znaky
Náhodné farby z celej palety: def rgb(r, g, b): return '#{:02x}{:02x}{:02x}'.format(r, g, b) farba = rgb(random.randrange(256),random.randrange(256),random.randrange(256)) #pozor, toto je keď máme import random. ak máme from import random *, potom nedávame len random.randrange() ale iba randrange()
6. For cyklus:
Ako zapisujeme FOR cyklus v pythone? Je na to viac rôznych spôsobov:
for i in range(10): #čísla od 0 do 9 print(i) for i in range(5,10): #čísla od 5 do 9 print(i, end=' ') for i in premenna: #v premennaej musí myť string napr. premenna = "Ahoj" print(i) for i in 1,2,3: print(i) for i in 2,3,5,11: print(i**2) for i in range(2,100,2): #čísla od 2 do 99 ale iba párne print(i, end=' ') for i in "AHOJ": print(i, end=' ') for i in "a","b","c","d": print(i) - veľmi dôležité: príkazy, ktoré sa majú vykonať v rámci for cyklu, musia byť ďalej od okraja - oddelenie od okraja buď automaticky, ak je správne zapísaná hlavička for cyklu - na stlačenie TAB (tabulátora) - alebo na 4 údery medzerníkom
7. Jednoduchý časovač do for cykla:
Postupné vykresľovanie objektov – jednoduchý časovač – používaný vo for cykle:
c.after(1000) #v zátvorke je počet milisekúnd c.update()
8. Komentovanie:
# - znak na zakomentovanie ## - alebo dva heštegy SK klávesnica: ALT - SHIFT (oba ľavé) - 3 (hore, tam kde sú písmená s diakritikou) Anglická klávesnica: SHIFT (ľavý) - 3 (hore, tam kde sú písmená s diakritikou) Pre obe klávesnice: - ak označím celý blok textu a potom stlačím zakomentovávanie, tak mi zakomentuje celú časť naraz dvoma ## - ak označíte zakomentovaný text a stlačíte namiesto 3 číslo 4 (hore), tak vám odkomentuje celý blok kódu
9. Získavanie vstupu od používateľa v Shelli:
vstup = input("Zadaj text: ") #ak pýtame texty - stringy vstup = int(input("Zadaj číslo: ")) #ak vieme, že chceme od používateľ celé číslo #vstup si treba uložiť do nejakej premennej
10. Vypísanie textu do Shellu:
print("Ahoj") #vypísanie textu do Shellu - stringov print(str(135)) #vypísanie čísla do Shellu (musíme pretypovať z čísla na string) print(textovapremenna) #môžeme vypísať aj text, ktorý máme v premennej print(str(ciselnapremenna)) #ak chceme vypísať číslo, ktoré je v premennej
11. Pretypovanie premennej:
int(textovapremenna) #pretypovanie textovej premennej na číslo, iba ak tam máme uložené texty, ktoré sú vlastne čísla v úvodzovkách "1" → 1 str(ciselnapremenna) #pretypovanie celočíslenej premennej na text 1 → "1"
12. Podprogramy/Funkcie/Procedúry:
#bez parametrov def nazov(): # prikazy nazov() #s parametrami, môže tam byť jeden aj viac) def nazov(parameter1, parameter2, parameter3): # prikazy nazov(hodnota1, hodnota2, hodnota3) #funkcie s návratovou hodnotou def navratovaNazov(): #prikazy return vysledok ulozeniedopremennej = navratovaNazov()
13. Podmienky:
if podmienka: prikazy else: prikazy #zložitejšia podmienka if podmienka: prikazy elif inapodmienka: prikazy else: prikazy #podmienka v matematickom zápise: <, >, <=, >=, == (rovná sa), != (nerovná sa), not (zápor) #dve podmienky spojené: and (a zároveň), or (alebo) Príklad podmienky: if pocet == 12: #prikazy Alebo zložená podmienka: if pocet == 12 and den = "pondelok": #prikazy Napr.: if 100 > body >= 90: print('za', body, 'bodov získavaš jednotku') elif body >= 80: print('za', body, 'bodov získavaš dvojku') else: print('rachol si')
14. Udalosti myši:

def nazovfunkcie(event): #okrem eventu si nevieme posielat ziadne ine parametre x = event.x #uloženie miesta kliknutia, to kde máme kurzor, x-ová súradnica kliku y = event.y #uloženie miesta kliknutia, to kde máme kurzor, y-ová súradnica kliku prikazy c.bind("<Button-1>", nazovfunkcie) # 1 - ľavé, 2 - stredné, 3 - pravé tlačidlo # "<Button-1>" - klikanie (ľavým tlačidlom) # "<B1-Motion>" - ťahanie (zakliknutého ľavého tlačidla) # "<ButtonRelease-1>" - pustenie ľavého tlačidla # "<Double-Button-1>" - dvojklik ľavým tlačidlom myši # "<Triple-Button-1>" - trojklik ľavým tlačidlom myši # ďalšie nájdeš tu
15. Udalosti klávesnice:
def nazovfunkcie(event): #okrem eventu si nevieme posielat ziadne ine parametre prikazy c.bind_all("<a>", nazovfunkcie) # "A" kláves na klávesnici def vypis(event): x = randrange(300) y = randrange(300) c.create_text(x,y,text=event.keysym) #vypíše to, na ktorý kláves sme klikli c.bind_all('<Key>', vypis) # hociktorý kláves na klávesnici Príklady tlačidiel: '<a>' '<Left>' '<Right>' '<Up>' '<Down>' '<Return>' '<space>'
16. Pravý časovač používaný vo funkciách:
Nekonečný časovač, ale len do chvíle, kým ho nestopneme podmienkou – zložitejší časovač – používaný vo funkciách:
def nazovfunkcie(): #tieto zatvorky musia byt prazdne prikazy #pripadne aj podmienka, kedy má iba fungovať časovač c.after(100, nazovfunkcie) #v zátvorke je počet milisekúnd a funkcia, v ktorej sa nachádza, update tam môže a nemusí byť nazovfunkcie()
17. Posúvanie objektov canvasu:
c.move('značka_objektu', posunx, posuny) #značka - je tag
a) klávesom:
x = 0 y = 0 c.create_oval(x, y, x+10, y+10, fill='red',tags='nazov') def vlavo(event): global x, y c.move('nazov',10,0) #posun o počet krokov doprava/doľava, posun o počet krokov hore/hole x = x + 10 c.bind_all("<Left>", vlavo)
b) v časovači:
x = 0 y = 0 c.create_oval(x, y, x+10, y+10, fill='red',tags='nazov') def padadole(): global x, y c.move('nazov',0,10) #posun o počet krokov doprava/doľava, posun o počet krokov hore/hole y = y + 10 c.after(100, padadole) padadole()
18. Entry a tlačidlo:
def button1_klik(): #funkcia, ktorá sa viaže ku tlačidlu prikazy hodnota = entry1.get() #získanie hodnoty z entryboxu #button, tlačidlo na ploche - musíte udať oba riadky!: button1 = tkinter.Button(text='text na buttone', command=button1_klik) #čo bude na tlačidle napísané a s ktorou funkciou je prepojené button1.pack() #zmena umiestnenia button1.pack(side = "bottom") -> strany: left, right, bottom, top #vstupné pole/entry box na ploche, povinné sú iba prvé dva riadky: entry1 = tkinter.Entry() #vytvorenie entryboxu entry1.pack() #zmena umiestnenia: entry1.pack(side = 'left') entry1.insert(0,'text') #toto je poznámka, ktorá sa bude zobrazovať v entryboxe, nepovinný príkaz, vôbec tam nemusí byť
19. Cyklus s podmienkou – WHILE
while podmienka: # opakuj príkazy, kým platí podmienka prikaz prikaz ... while podmienka: prikaz prikaz ... else: prikaz # vetva else je nepovinná! #nekonečný cyklus, ktorý ale môže spadnúť: while True: prikazy
20. Jednorozmerné polia (zoznamy, list):

#1. vytvorenie prázdneho pola prazdnepole = [] print(prazdnepole) #inak vytvorenie prazdneho pola: p = list() print(p) #2. vytvorenie hneď naplneného pola polecisel = [5, 6, 7, 8] #pole čísel print(polecisel) poletextov = ["ahoj", "čau", "p"] #pole textov print(poletextov) zmiesanepole = ["ahoj", 5, "p", True, 36] #zmiešané pole print(zmiesanepole) #3. práca s polom - koľko prvkové pole budeme mať? aké budú mať hodnoty? pole = [] for i in range(5): pole.append(randint(1,10)) #náhodné číslo do pola, alebo rovno môžete pridať hodnotu print(pole) #vieme pristupovať k jednotlivým prvom: print(pole[3]) #viete i vypísať hodnotu na danom mieste pole[3] = -19 #viete zmeniť hodnotu na danom mieste
21. Dvojrozmerné polia:

Vytvorenie dvojrozmerného poľa:
#1.spôsob dvojpole = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] print(dvojpole) #2.spôsob riadok1 = [1, 2, 3] riadok2 = [4, 5, 6] riadok3 = [7, 8, 9] polko = [riadok1, riadok2, riadok3] print(polko) #3.spôsob pole = [] for i in range(3): pole.append([0, 0, 0]) print(pole) #4.spôsob dvojrozmerne = [] for riadok in range(3): #namiesto 3ky môže byť radšej premenná pocetriadkov pom = [] for stlpec in range(3): #namiesto 3ky môže byť radšej premenná pocetstlpcov pom.append(0) dvojrozmerne.append(pom) print(dvojrozmerne) #5.spôsob p = [] riadkov = 3 stlpcov = 3 for i in range(riadkov): p.append([0] * stlpcov) print(p)
Ako čítať konkrétne miesto v poli:
->>> prepokladám, že mám vytvorené dvojrozmené pole p for i in range(riadok): for j in range(stlpce): print(p[i][j]) ->> ak neviem počet stĺpcov a riadkov v poli p, musím to robiť takto: for i in range(len(p)): for j in range(len(p[i])): print(p[i][j]) #Dôležité! Ak chceme pristupovať ku konkrétnej hodnote v poli, robíme to: p[riadok][stlpec] #Pri jednorozmernom poli nám stačilo urobiť p[index] ->> prípadne to môžem urobiť aj takto: for prvokriadku in p: for prvokstlpca in prvokriadku: print(prvokstlpca) #tu už hneď získame prvok
22. Práca s obrázkami – png a gif:
obrazok1 = tkinter.PhotoImage(file = 'zajac.png') #obrázok musí byť uložený v tomto istom priečinku ako python súbor!!!! #vykreslenie obrázka - x,y je v strede obrázka: c.create_image(100, 100, image = obrazok1, tag="zajko") #tag nemusí byť #zistenie rozmerov obrázka sirka = obrazok1.width() vyska = obrazok1.height() #Pole obrazkov: obrazky = [] def nacitaj(nazov, typ, pocet, obrazky): for i in range(1, pocet+1): obrazok = tkinter.PhotoImage(file = nazov + str(i) + '.'+typ) obrazky.append(obrazok) def nakresli(x,y,obrazky): for obrazok in obrazky: c.create_image(x, y, image = obrazok, anchor = 'nw') x += 100 nacitaj('obr_', 'png', 4, obrazky) nakresli(10, 30, obrazky)
Obrázkové pozadie:
import tkinter c = tkinter.Canvas() c.pack() pozadie = tkinter.PhotoImage(file = 'dlazba1.png') sirka = pozadie.width() vyska = pozadie.height() c.create_image(0, 0, image = pozadie, anchor = "nw") #zmena vykreslovania obrázka, teraz ho kreslíme z ľavého horného rohu, tam sa nachádza jeho x,y c['width'] = sirka c['height'] = vyska
23. Problémy s obrázkami
Čo ak mi píše, že nevie nájsť obrázky? Prípadne sú obrázky v inom priečinku?
import os cestaKPriecinku = os.path.dirname(__file__) cestaKSuboru = os.path.join(cestaKPriecinku, "images/trava.png") pozadie = tkinter.PhotoImage(file= cestaKSuboru) c.create_image(0,0, image = pozadie, anchor="nw")
24. Try-except
Je to formulka, pomocou ktorej viete odchytávať errory a upozorňovať na ne používateľa.
try: print(x) except NameError: #dá sa zapísať aj viac výnimiek naraz except (ValueError, IndexError): print("Premenná x nie je definovaná") except: print("Iná chyba, niečo je zle")
Bežné typy errorov: ValueError, NameError, IndexError, TypeError, ZeroDivisionError
25. Textové súbory – zápis a dopisovanie
- Prázdny súbor môžete alebo nemusíte mať vytvorený.
- Súbor musíme vždy otvoriť a zavrieť! Vždy keď urobíte open, musíte si zapísať aj close.
- Súbor sa vždy prepisuje „w“.
- Zapisovanie pomocou príkazu write vždy píše do jedného riadku, ak chcete, aby ďalšie slovo/vetu písalo na nový riadok, treba pridať \n
- Zapisovanie pomocou príkazu print, môžete pridať aj end, sem viete pridať oddeľovač, napr medzeru, alebo nový riadok, čiarku, hviezdičku, …. a treba napísať že do ktorého filu (súboru) zapisujete.
- Ak chcete pokračovať v zápisoch, nahraďte „w“ pímenom „a“ – znamená append, pridáva na koniec súboru.
- Pri práca si súbormi, majte vždy zavretý .txt súbor!!!!!!!!!!!!!!!!!! Nenechajte si ho otvorený!!!!!!!!!!!!
subor = open('zapis.txt', 'w') #w - prepisovanie súboru, vieme nahradiť aj inými písmenami "a", zapisovanie na koniec, "r" len čítanie subor.write("Čauko kakuko") subor.close() subor = open('zapis.txt', 'w') subor.write("Čauko kakuko\n") subor.write("Halo hahaha") subor.close() subor = open('zapis.txt', 'w') #keby máme namiesto "w" písmeno "a", tak by nám dopisovalo do súboru, nechalo by tam aj to pôvodné, čo tam bolo for i in range(10): print(randint(1, 100), end=' ', file=subor) subor.close()
26. Textové súbory – čítanie zo súboru
- Pri čítaní zo súboru, musí už súbor existovať!!!!!
- Súbor musíme vždy na začiatku otvoriť a zavrieť!
- Ak chceme čítať súbor, musíme napísať, že ideme čítať zo súboru „r“.
- Celý súbor vieme prečítať naraz pomocou príkazu read.
- Obsah si môžeme uložiť do premennej alebo ho rovno vypísať napr. do shellu, zapísať do iného súboru, napísať na canvas…
- Ak chceme prečítať súbor po riadkoch, tak čítame pomocou readline() ->>.> pozor na čítanie iba pomocou readline, pozrite sa ako to vypísalo a ako to vyzerá v skutočnosti v súbore!
- Pomocou príkazu repr(riadok) viete zistiť, aké skryté znaky sa nachádzajú v texte.
- Všimli ste si, že sa nám vypisujú aj tie skryté znaky, vieme ich odstrániť pomocou príkazu riadok. strip(). Odporúčam mať to ale aj v tom repr. Tak si zabezpečíte, že vám krásne prečíta celý riadok.
- Funkcia strip() nám vie odstrániť medzery aj skryté znaky (koniec riadka) z textu. Ale čo ak to tak nechcem? Čo ak chcem vymazať len znak konca riadka? Vieme použiť rstrip() – odstráni medzery a znak konca riadka sprava, lstrip() odtráni medzery a iné skryté znaky zo začiatku riadka.
- Ak náhodou máme diakritiku a škaredo to zobrazuje, treba čítať takýmto spôsobom: subor = open(meno_suboru, encoding=’utf-8′)
subor = open('citaj.txt', 'r') print(subor.read()) subor.close() subor = open('citaj.txt', 'r') for i in range(0,5): riadok = subor.readline() print(riadok) subor.close() subor = open('citaj.txt', 'r') for i in range(0,5): riadok = subor.readline() print(repr(riadok)) subor.close() subor = open('citaj.txt', 'r') for i in range(0,5): riadok = subor.readline() print(repr(riadok.strip())) subor.close() #Ak neviem počet riadkov súboru, tak takto: subor = open('citaj.txt', 'r') riadok = subor.readline() while riadok != '': print(repr(riadok.strip())) riadok = subor.readline() subor.close() #alebo toto - ja preferujem tento spôsob: subor = open("data.txt", "r") for riadok in subor: print(riadok.strip()) subor.close()
Práca s textovými reťazcami
Tuple / n-tice
Asociatívne polia
Vylepšenia do tkinter okna