Documents
Resources
Learning Center
Upload
Plans & pricing Sign in
Sign Out

Java - Nauk

VIEWS: 0 PAGES: 18

									Python - Grafični uporabniški
vmesniki
Gumbi, dogodki, …




                                1
Gumb

  Button
  Ima lastnost command
  Tam vpišemo ime funkcije, ki se izvede ob
  kliku na gumb
import tkinter
def kajdelam():
    print("Klik!")
okno = tkinter.Tk()
gumb = tkinter.Button(okno, text="OK",
  command=kajdelam)
gumb.pack()
okno.mainloop()

                                              2
Dogodkovno programiranje

  S tem smo dejasnko začeli uporabljati
  dogodkovno programiranje
  Naši grafični objekti ob določenem dogodku
  (klik, sprememba vrednosti, …) znajo izvesti
  določeno akcijo, s katero lahko spet vplivajo
  na druge objekte, ki spet zaradi dogodka nad
  njimi sprožijo nove akcije …




                                                  3
Štejmo klike

  Denimo, da bi želeli šteti, koliko je klikov
  Poleg gumba imejmo še oznako, ki bo štela
  klike
  Metoda kajDelam()
     Nastavi vrednost napisa na oznaki
     Poveča števec klikov
  Problema
     Kako povečevati
     Kako spreminjati napis

                                                 4
Povečevanje števca

def stejemo() :
    stej = stej + 1

stej = 0
print(stej)
stejemo()
print(stej)




                      5
Globalne spremenljivke

def stejemo() :
    global stej
    stej = stej + 1

stej = 0
print(stej)
stejemo()
print(stej)




                         6
A pozor!

  Načeloma se globalnim spremenljivkam
  izogibamo!
  Pravi način bi bil preko objektov, lastnosti …
    A tega še ne znamo!




                                                   7
Spremeniti napis

import tkinter
okno = tkinter.Tk()
vsebinaNapisa = tkinter.StringVar()
stejem = tkinter.Label(okno,
  textvariable = vsebinaNapisa,
  font =('Arial', 30), width=10, height=5)
stejem.pack()
vsebinaNapisa.set("ZDRAVO!")
okno.mainloop()




                                             8
Program za štetje

import tkinter

def kajDelam():
   global števec # uporabljamo globalno spremenljivko števec
   vsebinaNapisa.set("Klikov: " + str(števec))
   števec = števec + 1

okno = tkinter.Tk()
gumb = tkinter.Button(okno, text = "OK", command = kajDelam)
gumb.pack()

vsebinaNapisa = tkinter.StringVar()
vsebinaNapisa.set("Klikov: 0")
štejem = tkinter.Label(okno, textvariable = vsebinaNapisa, font =('Arial', 30),
    width=10, height=5)
štejem.pack()

števec = 0
okno.mainloop()




                                                                                  9
Zagon programa

  Kako bi sestavili uporabniški vmesnik, ki bi
  omogočal izbiro med različnimi programi?
  Ob kliku na ustrezen gumb, bi se zagnal nek
  program, ki bi potem svoje odgovore izpisal v
  samostojnem oknu.




                                              10
Samostojno okno

  Prikaz samostojnega okna le z rezultati:
    tkinter.messagebox.showInfo('Ime okna',
    'Vsebina')
  Zgled


import tkinter
kajNajIzpišem = input("Kaj naj izpišem: ")
tkinter.messagebox.showinfo("ŽELELI STE in
  ...", kajNajIzpišem)


                                              11
 Koda

import tkinter
# uporabniški vmesnik
def GUI() :
   okno = tkinter.Tk()
   #imamo tri programe, torej tri gumbe
   gumb1 = tkinter.Button(okno, text = 'Obrni', command = obrniNiz)
   gumb1.pack()
   gumb2 = tkinter.Button(okno, text = 'Razbij', command = razbij)
   gumb2.pack()
   gumb3 = tkinter.Button(okno, text = 'Seštevaj',
      command = seštevaj)
   gumb3.pack()
    # in poženimo vse skupaj
    okno.mainloop()




                                                               12
  Koda

# funkcije

def obrniNiz() :
    ''' preberemo niz in ga izpišemo v oknu '''
    niz = input("Vnesi niz: ")
    obNiz = niz[::-1] # obračamo niz
    tkinter.messagebox.showinfo('Obrnjeni niz',
         niz + '\n\nobrnjen\n\n' + obNiz)

def razbij() :
    pass                          Povemo, da ni tukaj še
                                  nič, le "okostje"
def seštevaj() :
    pass                          Uporabno za testiranje




                                                           13
Vnos podatkov

  Ali je možno narediti vnos podatkov preko
  GUV
  Vnosno polje
  Entry
  Osnovna lastnost:
    Širina (width)
  Osnovna metoda
    Vsebina vnosa
    get()
                                              14
Šparta

import tkinter
# uporabniški vmesnik
def GUI() :
    okno = tkinter.Tk()
    vnos = tkinter.Entry(okno, width = 10)
    vnos.pack()
    gumb2 = tkinter.Button(okno,
       text = 'Prikaži vnos', command = prikaz)
    gumb2.pack()
    okno.mainloop()

def prikaz() :
    kajJe = vnos.get()
    print(kajJe)



                                                  15
In ponovne težave




                    16
A te že znamo rešiti

  Res?
  global vnos
  v prikaz()
  A ne pomaga …
  Poskusimo
   >>> GUI()
   Exception in Tkinter callback
   Traceback (most recent call last):
     File "C:\Python30\lib\tkinter\__init__.py", line 1399, in __call__
        return self.func(*args)
     File "C:/Users/lokar/Desktop/PythonGrafika/vnos.py", line 17, in prikaz
        kajJe = vnos.get()
   NameError: global name 'vnos' is not defined
   >>>

  Razen če …
     Seveda, vnos je lokalna spremenljivka v GUI
     Zato global vnos znotraj GUI() in ne v prikaz()!


                                                                               17
Pregled gr. objektov in njihovih lastnosti

  Denimo:
     http://effbot.org/tkinterbook/tkinter-index.htm#class-
     reference
     http://www.pythonware.com/library/tkinter/introduction
     /tkinter-reference.htm
     http://infohost.nmt.edu/tcc/help/pubs/tkinter/index.html
  In sedaj je ovira le še vaša domišljija in vaši programi
  bodo zasijali v vsej svoji lepoti ;-)

  No, dejstvo je, da če želimo delati malo lažje (in brez
  čaranja z globalnimi spremenljivkami in podobnim),
  potrebujemo objekte in objektni pristop

                                                             18

								
To top