Preprost primer GUI programa

Primeri GUI programov v tem poglavju uporabljajo modul simplegui, ki je na voljo samo v tem interaktivnem učbeniku. Za izdelavo GUI interaktivnih programov v jeziku Python sicer uporabljamo modul tkinter, ki je precej razširjen in bistveno bolj kompleksen. Osnove GUI programiranja bomo spoznali s pomočjo interaktivnih GUI programov, ustvarjenih z modulom simplegui. Za primerjavo pa bo vsem programom dodana tudi koda, ki bo uporabljala modul tkinter.

Prvi preprost primer GUI programa bomo uporabili za to, da prikažemo osnovna 4 opravila oziroma naloge GUI programiranja. Določili bomo izgled GUI programa, ki bo vseboval okno z vsebino – napisom ter gumb, na katerega bo uporabnik lahko kliknil. Druga naloga bo povezovanje klika na gumb in spreminjanja vsebine napisa:

okvir = simplegui.create_frame("Okno", 300, 200)
okvir.set_canvas_background("black")
okvir.add_button("Klikni", klik)
okvir.set_draw_handler(narisi)

Naslednja naloga bo izdelava funkcije, ki bo ob kliku na gumb dejansko spremenila vsebino napisa:

def klik():
  global sporocilo
  sporocilo = "Bravo!"

def narisi(platno):
  platno.draw_text(sporocilo, [50, 100], 36, "red")

Zadnja naloga pa bo vzpostavitev dogodkovne zanke, ki bo čakala na to, da uporabnik klikne na gumb ter nato sprožila ustrezni dogodkovni rokovalnik.


Izvedi Počisti


  1 # encoding: utf-8
  2 import tkinter as tk
  3 
  4 besedilo = "Lep pozdrav!"
  5 
  6 # Rokovalnik za klik miške na gumb
  7 def klik():
  8   global besedilo
  9   besedilo = "Bravo!"
 10   # Izbriši vsebino platna
 11   platno.delete("all")
 12   # Na novo napiši besedilo
 13   platno.create_text(150, 100, fill="red", text=besedilo, \
 14     font=("Times", 27))
 15 
 16 # Ustvari okno, okvir in platno
 17 okno = tk.Tk()
 18 okno.title("Okno")
 19 okno.geometry("500x250")
 20 
 21 okvir = tk.Frame(okno)
 22 okvir.grid(row=0, column=0, pady=20)
 23 
 24 platno = tk.Canvas(okno, width=300, height=200, bg="black")
 25 platno.grid(row=0, column=1, pady=20)
 26 
 27 platno.create_text(150, 100, fill="red", text=besedilo, \
 28   font=("Times", 27))
 29 
 30 # Poveži funkcije z dogodkovnimi rokovalniki
 31 gumb = tk.Button(okvir, text="Klikni", command=klik)
 32 gumb.configure(width=10)
 33 gumb.grid(row=0, column=0, padx=45)
 34 
 35 # Zaženi dogodkovno zanko
 36 okno.mainloop()
 37 

Izvorna koda