1 / 18

Python - Grafični uporabniški vmesniki

Python - Grafični uporabniški vmesniki. Gumbi, dogodki, …. 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 ()

emele
Télécharger la présentation

Python - Grafični uporabniški vmesniki

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  2. 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()

  3. 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 …

  4. Š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

  5. Povečevanje števca def stejemo() : stej = stej + 1 stej = 0 print(stej) stejemo() print(stej)

  6. Globalne spremenljivke def stejemo() : globalstej stej = stej + 1 stej = 0 print(stej) stejemo() print(stej)

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

  8. Spremeniti napis importtkinter 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()

  9. 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()

  10. 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.

  11. Samostojno okno • Prikaz samostojnega okna le z rezultati: • tkinter.messagebox.showInfo('Ime okna', 'Vsebina') • Zgled import tkinter kajNajIzpišem= input("Kajnajizpišem: ") tkinter.messagebox.showinfo("ŽELELI STE in ...", kajNajIzpišem)

  12. Koda import tkinter # uporabniškivmesnik 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()

  13. Koda # funkcije def obrniNiz() : ''' preberemoniz in gaizpišemo v oknu ''' niz = input("Vnesiniz: ") obNiz = niz[::-1] # obračamo niz tkinter.messagebox.showinfo('Obrnjeniniz',niz+ '\n\nobrnjen\n\n' + obNiz) def razbij() : pass def seštevaj() : pass Povemo, da ni tukaj še nič, le "okostje" Uporabno za testiranje

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

  15. Šparta import tkinter # uporabniškivmesnik def GUI() : okno = tkinter.Tk() vnos = tkinter.Entry(okno, width = 10) vnos.pack() gumb2 = tkinter.Button(okno, text = 'Prikaživnos', command = prikaz) gumb2.pack() okno.mainloop() def prikaz() : kajJe = vnos.get() print(kajJe)

  16. In ponovne težave

  17. 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()!

  18. 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

More Related