Ova web-stranica je namjenjena meni kao podsjetnik za Python - tkinter.

Still learning, so I will post in future.


Instalacija Python-a.

Na sljedećem linku možete pronaći Python: https://www.python.org/
Downloads > Windows > Python Releases for Windows > Stable Releases > Python 3.10.8 - Oct. 11, 2022 > Download Windows installer (64-bit)
Zašto sam odabrao "Python 3.10.8" kada postoji novija verzija "Python 3.11.0 - Oct. 24, 2022"?
Zato jer sam pokušao instalirati biblioteku pygame na najnoviju verziju Python-a, ali je problem u tome što u ovom trenutku (11.2022) najnovija verzija pygame nije prilagođena za najnoviju verziju Python-a.
Kako provjeriti koja je najnovija verzija pygame-a?
Na sljedećem linku: https://pypi.org/project/pygame/#files se nalaze "Built Distributions". Ispod svakog linka piše "Uploaded Dec 27, 2021 cp310". "cp310" znači verzija python-a "3.10".

I to bi bilo to. Jedino je važno da prilikom instalacije odaberete kvačicu add PATH to system variable. Bez toga vam neće raditi kako treba.


Instalacija biblioteka kao npr. tkinter ili pygame.

Pored gumba "Start", desno se nalazi povćalo kliknite na njega i upišite cmd . Kada vam se pojavi na listi "Naredbeni redak" desnom tipkom miša kliknite na njega > "Pokreni kao administrator". Kliknite "Da". Otvara se cmd.
Upišite komandu python --version , ako vam ispiše Python 3.10.8 ili nešto slično imate instaliran Python na vašem računalu.
Za instalaciju biblioteke tkinter potrebno je upisati u komandnu liniju: pip install tk . Za instalaciju biblioteke pygame potrebno je u komandnu liniju upisati: pip install pygame .
Kako provijeriti da li je biblioteka instalirana?
Idite na "Start" > pronađite "Python 3.10" > kliknite na "IDLE" . I otvara se Python IDLE Shell.
Upišite import tkinter . Ako ne javlja grešku znači da je uspješno instalirana biblioteka tkinter.


Koji IDE ja koristim?

Za sve u vezi sa Python-om koristim "Python IDLE". Kada instalirate Python instalira se i IDLE.
Kako pronaći Python IDLE? Idite na "Start" > pronađite "Python 3.10" > kliknite na "IDLE" . I otvara se Python IDLE Shell.
Da biste kreirali novu datoteku i počeli programirati kliknite na File > New File . Otvara se novi prozor. Upišite print("Hello World") , spremite datoteku kliknite i u izborniku kliknite na Run > Run Module F5 .


Izrada prvog GUI programa sa tkinter-om

Na ovoj web-stranici ćete naći korisne informacije za početak: https://www.tutorialspoint.com/python/python_gui_programming.htm
Da biste mogli koristiti GUI prozor morate uvest biblioteku tkinter. To se radi na način da prva izvršna (ne komentar) linija koda mora biti:

 import tkinter 
Možete napisati i "import tkinter as tk" bez navodnika. Što znači da ubuduće svugdje u programu gdje biste napisali tkinter napišete samo tk. npr tk.Tk() . poslje ključne riječi as možete napisati bilo što kao npr. import tkinter as roko i kasnije koristiti roko umjesto tkinter kao npr. roko.Tk(). Ja ću svugdje koristiti tkinter radi lakšeg snalaženja. Sljedeće, stvaranje glavnog prozora:
 root = tkinter.Tk() 
Ako ne odredite veličinu prozora. Prozor će se stisnuti oko sadržaja. Da biste napravili glavni prozor određene veličine možete koristiti metodu:
 root.geometry("960x600") 
Ja ću koristiti veličinu svog ekrana podjeljeno na pola (cjelobrojno djeljenje). Što bi bilo screenX = 1920//2 # 960 , screenY = 1200//2 # 600
Više o metodi geometry() možete pronaći na sljedećem linku: https://www.geeksforgeeks.org/python-geometry-method-in-tkinter/
Ja neću koristiti metodu geometry() iz razloga što ne mogu upisati varijablu unutar parametara i veličina glavnog prozora se može smanjivati, što ne želim. Iz razloga što ću koristiti prozor određene veličine i sve pozicionirati na njeg kako mi odgovara i želim da kad mi se poveča da sve ostaje na svom mjestu. Za odrediti minimalnu veličinu glavnog prozora koristiti ću metodu minsize() . Za više informacija o toj metodi možete pronaći na sljedećem linku: https://www.geeksforgeeks.org/how-to-set-a-tkinter-window-with-a-constant-size/
 root.minsize(screenX, screenY) 
Sljedeće želim da mi nešto piše na vrhu programa (title). Kao npr. "naziv programa - Autor: - Verzija:" . Za to se koristi metoda title()
 root.title("naziv programa - Autor: - Verzija:") 
Ako vas zanima koje su sve dostupne metode za pojedini objekt, možete ih naći na sljedeći način:
      import tkinter
      root = tkinter.Tk()
      dir(root)
      
Među ostalima se nalazi i metoda "title" Sljedeće što ćemo napraviti je labela (natpis). Koristi se za više stvari, a među ostalim i za tekst koji se mjenja.
      # Create widgets
      label1 = tkinter.Label(root, text="Widget 1 - \"nw\"", bg='red')
      
Na sljedećem linku možete naći više o labeli: https://www.tutorialspoint.com/python/tk_label.htm
Sljedeće pozicioniranje labele1 na glavnom prozoru:
 label1.place(anchor="nw", width=100, height=50, x=20, y=20) 
Na sljedećem linku možete naći više o place() metodi: https://www.tutorialspoint.com/python/tk_place.htm
Bitno je spomenuti da place() metoda pozicioira objekt u ovom slučaju labelu kamo vi odaberete na glavnom prozoru.
Može se pozicionirati sa parametrima (opcijama) x i y (apsolutno u odnosu na anchor u px) ili relx i rely (relativno u odnosu na anchor u postocima tj. od 0.0 do 1.0 (što je isto kao od 0% do 100%)). Npr. ako želite pomaknuti za 10% napisati ćete 0.1 ili ako želite pomaknuti za 1% napisati ćete 0.01
x, y i relx, rely rade jedno te isto. Tako da ako ih zajedno stavite u parametre jedan od njih će pobiti drugog tj. samo jedan će biti aktivan. Pa najbolje da odaberete samo jedan od tih dva (absolutni ili relativni) načina za parametre.
Možete odrediti veličinu pravokutinika koji obuhvaća text (to se još zove padding u css-u). Sa width i height (absolutno u px) ili relwidth i relheight (relativno od 0.0 do 1.0). Isto važi kao i za pozicioniranje
Još jedan bitan parametar (option) je anchor. Može biti više vrijednosti (uvijek samo jedna aktivna), a određuju se prema stranama kompasa. Npr. nw, sw, ne, se itd.
Važno je napomenuti da se anchor vrijednost piše malim slovima i kao string npr. anchor="nw" Još da napomenem stranice i kutovi anchora se odnose na pravokutnik oko labele, ne na glavni prozor.
Ako želite pozicionirati labelu 20px desno i 20px dole onda ćete napisati:
 label1.place(anchor="nw", width=100, height=50, x=20, y=20) 
Ako želite pozicionirati labelu 20px desno i 20px gore gledano od donjeg ruba glavnog prozora onda ćete napisati:
 label2.place(anchor="sw", width=100, height=50, x=20, y=screenY-20) 
I tako dalje. Još da napomenem. Sve se pozicionira od gornjeg lijevog kuta glavnog prozora: prema desno (za x koordinatu) i prema dole (za y koordinatu)
Evo jednog primjer pozicioniranja: (najprije sav kod, pa slika 001)
# import tkinter as tk
import tkinter

# help() > tkinter - ispisuje help za tkinter
# Alt + PrintScreen - samo aktivni prozor

# Create the main window
root = tkinter.Tk()
# dir(root) - ispisuje sve metode koje sadrži root
screenX = 1920//2
screenY = 1200//2
root.minsize(screenX, screenY)

root.title("Naziv programa - Autor: - Verzija:")



# Create widgets
label1 = tkinter.Label(root, text="Widget 1 - \"nw\"", bg='red')
label2 = tkinter.Label(root, text="Widget 2 - \"sw\"", bg='red')
label3 = tkinter.Label(root, text="Widget 3 - \"ne\"", bg='red')
label4 = tkinter.Label(root, text="Widget 4 - \"se\"", bg='red')


# Lay out widgets with place()

label1.place(anchor="nw", width=100, height=50, x=20, y=20)
label2.place(anchor="sw", width=100, height=50, x=20, y=screenY-20)
label3.place(anchor="ne", width=100, height=50, x=screenX-20, y=20)
label4.place(anchor="se", width=100, height=50, x=screenX-20, y=screenY-20)

# Run forever!
root.mainloop()
Tkinter - slika 001
I na kraju da bi program uopće radio treba pokrenut petlju sa sljedećim kodom:
 root.mainloop()