HUOM! Voit itse lisätä ja muuttaa sisältöä muokkaa-painikkeiden avulla

 Olet itse vastuussa tämän teoksen käytöstä aiheutuvista vahingoista Lue lisää.

Python graafinen käyttöliittymä

Kohteesta Wikikko - kansan taitopankki
Siirry navigaatioon Siirry hakuun

Yleistä[muokkaa]

Pääsivu: Python

Ohjelman saaminen toimimaan ikkunassa ei ole kovin vaikeaa. Tällä sivulla käydään läpi perusteita. GUI widgets (Graphical User Interface) eli graafisen käyttöliittymän elementtejä esimerkiksi ikkuna, valikko, kuvake. Attribuutti on esimerkiksi background="red". Ikkunointijärjestelmä esim. Windows 8, Linux Gnome ja Mac OS X. Kirjasto esimerkiksi Tk sovittaa käytettävään ikkunointijärjestelmään.

Tehdään ikkuna jossa otsikko, tekstiä, syöttöruutu ja painike

from tkinter import *

ikkuna1 = Tk()   # luodaan ikkunaolio
ikkuna1.title("Ikkunan otsikko")

muuttuja1 = Label(ikkuna1, text="Teksti1") # luodaan Label-olio
muuttuja2 = Entry(ikkuna1, width=15)
muuttuja3 = Button(ikkuna1, text="Painiketeksti")

# Näytetään ikkunassa seuraavassa järjestyksessä
muuttuja3.pack()   # metodi tuo esille
muuttuja2.pack()
muuttuja1.pack()

mainloop()

Sijoittelu ikkunassa (geometria)[muokkaa]

  • Elementit voidaan sijoittaa ikkunaan eri tavoin ja niiden tulisi näkyä ennalta suunnitellusti vaikka käyttäjä mielivaltaisesti muuttaa ikkunan kokoa. pack() tai vastaava tuo elementin näkyviin. Elementtien järjestys toisiinsa nähden ja kohta ikkunassa määritetään näiden avulla.
  • sijoittelu"komento" voidaan kirjoittaa omalle riveille tai rivin loppuun:
muuttuja3 = Button(ikkuna1, text="Painiketeksti").pack()

muuttuja3 = Button(ikkuna1, text="Painiketeksti")
muuttuja3.pack()

pack() ryhmittelee vapaasti. Esim. muuttuja1.pack(side=LEFT)
grid() ryhmittelee taulukkona
place() ryhmittelee määrättyyn paikkaan

Toiminnallisuus[muokkaa]

Toiminnallisuus suoritetaan lisäämällä esimerkiksi Button kohtaan command=funktionimi ja tehdään normaalisti def komennolla toiminto.

from tkinter import *

def ponnahdusikkuna(): 
    muuttuja2.config(bg="white") # vaihdetaan ruutu valkoiseksi
    messagebox.showinfo("Otsikko", muuttuja2.get()) # avataan ponnahdusikkuna
    muuttuja5.delete(0, END) # tyhjennetään alin kenttä
    muuttuja5.insert(0, muuttuja2.get()) # lisätään kenttään kirjoitettu teksti

def lopetusvahvistus():
    if messagebox.askyesno("Otsikko","Lopetetaanko?"): # True-arvolla (Yes) ikkuna1 suljetaan
        ikkuna1.destroy()
    
ikkuna1 = Tk()   # luodaan ikkunaolio
kehys1 = Frame(ikkuna1, relief=SUNKEN, bd=10) # upotetaan kehykseen

muuttuja1 = Label(kehys1, text="Kirjoita jotain")
muuttuja2 = Entry(kehys1, width=15, bg="red")
muuttuja3 = Button(ikkuna1, text="Tulosta ponnahdusikkunaan", command = ponnahdusikkuna)
muuttuja4 = Button(ikkuna1, text="Lopeta", command = lopetusvahvistus)
muuttuja5 = Entry(ikkuna1, width=15)

kehys1.pack()
muuttuja1.pack()
muuttuja2.pack()
muuttuja3.pack(side=RIGHT)   # sijoitetaan painike ikkunan oikeaan reunaan
muuttuja5.pack()
muuttuja4.pack()

mainloop()

Räätälöity ponnahdusikkuna[muokkaa]

from tkinter import *

def viestiIkkuna():
    win = Toplevel()
    win.title('Ponnahdusikkunan otsikko')
    message = "Ponnahdusikkunan teksti"
    Label(win, text=message).pack()
    Button(win, text='Painikkeen teksti', command=win.destroy).pack()
    
ikkuna = Tk()

Button(ikkuna, text='Avaa ponnahdusikkuna', command=viestiIkkuna).pack()

ikkuna.mainloop()

Ponnahdusikkuna[muokkaa]

# Esimerkki 1
from tkinter import *
main = Tk()
text = Text(main, width=40, height=10, wrap="char")
text.pack()
text.insert(INSERT, "".join(map(str, range(100))))
text.tag_add(SEL, "1.0", "end")
text.focus_set()
def jump():
    text.after(500, btn.focus_set)
    text.after(1000, text.focus_set)
btn = Button(main, text="Ok", command=jump)
btn.pack()
main.mainloop()