Knjiga - mrežno i paralelno programiranje

8. Dogovor o pisanju programa s grafičkim korisničkim sučeljem

Nije obavezan dio, ali pogledajte ako imate vremena, ako ne, odmah pređite na lekciju 9.

Danas je u programiranju sveopće prihvaćena paradigma objektno usmjerenog programiranja. Takav pristup koristit ćemo i mi u svojim programima. Program ćemo kreirati kao klasu, na kraju ćemo kreirati instancu klase, tj. objekt i time pokrenuti program.

Budući da ćemo se u svakom programu koristiti klasom Frame, kreirat ćemo klase koje će ju nasljeđivati. U ovom trenutku implementacija će se sastojati samo od konstruktora. Unutar njega ćemo definirati: naslov prozora, parametre vezane uz sam prozor, povezati prozor s okvirom, definirati geometriju prozora te pozvati metodu koja će kreirati ostale elemente sučelja. Sve ostale elemente sučelja definirat ćemo u posebnoj metodi KreirajSucelje() koja će u prozor dodati sve ostale elemente sučelja. Svaki element sučelja postavit ćemo kao parametar klase unutar koje se nalazi program. Ilustrirajmo to na prethodnom primjeru:

Primjer 2 iz 7. Tkinter - okviri i gumbi

from tkinter import *
t = Tk()
t.config()
f = Frame(t)
f.grid(rows=2, columns=2)
a = Button(f, text='Gumb A', fg='blue', font=('Calibri', 14, 'bold'))
a.grid(row = 1, column = 1)
b = Button(f, text='Gumb B', fg='green', font=('Calibri', 14, 'bold'))
b.grid(row=1, column=2)
c = Button(f, text='Gumb C', fg='red', font=('Calibri', 14, 'bold'))
c.grid(row=2, column=1, columnspan=2)
mainloop()

Objektno usmjereno programiranje - isti primjer napisan na drugi način:

from tkinter import *
#Klasa Program koja nasljeđuje klasu Frame
class Program(Frame):
    #Konstruktor klase kao parametar ima prozor
    #programa unutar kojeg će se nalaziti okvir
    def __init__(self, root):
        self.root = root
        self.root.title('Tri gumba')
        #pozivamo konstruktor klase Frame, čiji je parametar prozor programa
        super().__init__(self.root)
        self.grid(rows = 2, columns = 2)
        self.KreirajSucelje()
        return

def KreirajSucelje(self):
        f = ('Calibri', 14, 'bold')
        self.A = Button(self, text = 'Gumb A', fg = 'blue', font = f)
        self.A.grid(row = 1, column = 1)
        self.B = Button(self, text = 'Gumb B', fg = 'green', font = f)
        self.B.grid(row = 1, column = 2)
        self.C = Button(self, text = 'Gumb C', fg = 'red', font = f)
        self.C.grid(row = 2, column = 1, columnspan = 2)
        return
 
def main():
    #Kreiramo instancu klase Program, čiji je parametar prozor glavnog programa -
    #objekt tipa Tk
    p = Program(Tk())
    mainloop()
    return
main()