Ohjelmoinnin perusteet Y Python



Samankaltaiset tiedostot
Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

C# Windows ohjelmointi perusopas

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin perusteet Y Python

PYTHON - TKINTER JA GRAAFINEN KÄYTTÖLIITTYMÄ. Lappeenrannan teknillinen yliopisto 2007 Jussi Kasurinen ISBN ISSN

Graafisten käyttöliittymien alkeet Pythonin ja tkinter-kirjaston avulla

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

2016/07/05 08:58 1/12 Shortcut Menut

Tähtitieteen käytännön menetelmiä Kevät 2009 Luento 5: Python

Ohjelmoinnin perusteet Y Python

GeoGebra-harjoituksia malu-opettajille

Ohjelmoinnin perusteet Y Python

Osio 4: Graafinen käyttöliittymä

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

Kirjaudu sisään palveluun klikkaamalla Omat kartat -painiketta.

Ohjelmoinnin peruskurssien laaja oppimäärä

HARJOITUKSIA ios-ohjelmointiin LIITTYEN

Harjoitus 3: Flash-komponenttiarkkitehtuuri ( )

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin perusteet Y Python

Oliosuunnitteluesimerkki: Yrityksen palkanlaskentajärjestelmä

H5P-työkalut Moodlessa

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op. Poikkeukset ja tietovirrat: Virhetilanteiden ja syötevirtojen käsittely

KESKUSTANUORTEN NETTISIVUT- OHJEITA PIIRIYLLÄPITÄJÄLLE 1. KIRJAUTUMINEN

1 Tehtävän kuvaus ja analysointi

Harjoitustyö: virtuaalikone

Harjoitus Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti:

Ohjelmoinnin peruskurssi Y1

UpdateIT 2010: Editorin käyttöohje

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1

Flash ActionScript osa 4

8/20: Luokat, oliot ja APIt

815338A Ohjelmointikielten periaatteet

Alkuun HTML5 peliohjelmoinnissa

JAVA on ohjelmointikieli, mikä on kieliopiltaan hyvin samankaltainen, jopa identtinen mm. C++

Muita kuvankäsittelyohjelmia on mm. Paint Shop Pro, Photoshop Elements, Microsoft Office Picture Manager

Ohjelmoinnin peruskurssi Y1

815338A Ohjelmointikielten periaatteet Harjoitus 5 Vastaukset

Ohjelmoinnin perusteet Pythonilla. Teemu Sirkiä, 2015

Uutiskirjesovelluksen käyttöohje

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin perusteet Y Python

Tähtitieteen käytännön menetelmiä Kevät 2009 Luento 6: Python

UML Luokkakaavio 14:41

Ohjelmoinnin peruskurssien laaja oppimäärä, kevät

Jypelin käyttöohjeet» Miten saan peliin pistelaskurin?

Olio-ohjelmointi Javalla

RockID-varastonhallintajärjestelmän käyttöohje. v. 1.0

Skype for Business ohjelman asennus- ja käyttöohje Sisällys

Transkriptio:

Ohjelmoinnin perusteet Y Python T-106.1208 12.4.2010 T-106.1208 Ohjelmoinnin perusteet Y 12.4.2010 1 / 34

Graafiset käyttöliittymät Tähän asti kirjoitetuissa ohjelmissa on ollut tekstipohjainen käyttöliittymä. Useimmissa nykyisissä ohjelmissa on kuitenkin graafinen käyttöliittymä, jossa käyttäjä ohjaa ohjelman toimintaa erilaisten komponenttien, kuten valikoiden, tekstikenttien, painikkeiden jne avulla. Tällä luennolla käydään läpi joitakin perusasioita graafisen käyttöliittymän kirjoittamisesta. Lisää perustietoa suomeksi on saatavissa esimerkiksi oppaasta www.it.lut.fi/publications/ files/publications/490/python-tkinteropas_lty2007.pdf Tarkempaa tietoa englanniksi on saatavilla sivulta http://www.pythonware.com/library/tkinter/introduction/ T-106.1208 Ohjelmoinnin perusteet Y 12.4.2010 3 / 34

Yleistä graafisen käyttöliittymän kirjoittamisesta Graafisen käyttöliittymän kirjoittamiseen tarvitaan sopiva moduuli. Vaihtoehtoisia moduuleja on tarjolla useita, mutta niistä yleisemmin käytetty on Tkinter, jonka on yleensä asennettu Python-ohjelmointiympäristön mukana. Graafisen käyttöliittymän määrittelevän tiedoston alkuun kirjoitetaan siis import Tkinter Yleensä graafisen käyttöliittymän määritettelevä koodi kirjoitetaan luokan sisään. Käyttöliittymän ikkunaa luodessa tehtävät toimenpiteet kirjoitetaan metodin init sisään. Ikkuna luodaan ja ohjelma käynnistetään luomalla olio käyttöliittymän määrittelevästä luokasta. T-106.1208 Ohjelmoinnin perusteet Y 12.4.2010 5 / 34

Esimerkki 1: tyhjä ikkuna import Tkinter class Ikkuna: def init (self): self.paaikkuna = Tkinter.Tk() self.paaikkuna.title("esimerkki 1") Tkinter.mainloop() esimerkki_ikkuna = Ikkuna() T-106.1208 Ohjelmoinnin perusteet Y 12.4.2010 7 / 34

Vaihtoehto esimerkille 1 Vähänkin suuremmissa ohjelmissa tarvitaan useita eri asioita Tkinter-moduulista. Jos import-käsky kirjoitetaan vähän toisella tavalla, ei moduulin nimeä tarvitse kirjoittaa aina moduulista tuotujen luokkien ja metodien nimien eteen. from Tkinter import * class Ikkuna: def init (self): self.paaikkuna = Tk() self.paaikkuna.title("esimerkki 1") mainloop() esimerkki_ikkuna = Ikkuna() T-106.1208 Ohjelmoinnin perusteet Y 12.4.2010 9 / 34

Komponentteja ikkunaan Moduulissa Tkinter on eri luokkia erilaisten komponenttien (engl. widget) luomista varten, esimerkiksi painikkeita varten luokka Button ja tekstin esittämistä varten luokka Label. Kun halutaan lisätä ikkunaan joku komponentti, luodaan vastaavan luokan olio. Oliota luodessa kerrotaan, mihin komponentti tulee (esim. pääikkuna). Lisäksi komponentteja luodessa voidaan antaa muita tietoja, kuten komponenttiin tuleva teksti. Komponentin luominen ei vielä lisää komponenttia ikkunaan, vaan tämä pitää tehdä erikseen metodilla pack. Seuraavan kalvon esimerkkiohjelmassa luodaan ikkuna, jossa on yksi teksti. T-106.1208 Ohjelmoinnin perusteet Y 12.4.2010 10 / 34

Komponentteja ikkunaan, koodi from Tkinter import * class TekstiIkkuna: def init (self): self.paaikkuna = Tk() self.paaikkuna.title("esimerkki 2") self.teksti = Label(self.paaikkuna, \ text = " Tekstia ikkunassa! ") self.teksti.pack() mainloop() oma_ikkuna = TekstiIkkuna() T-106.1208 Ohjelmoinnin perusteet Y 12.4.2010 12 / 34

Painike ikkunaan Ikkunaan voidaan luoda painikkeita luokan Button avulla. Pelkkä painikkeen luominen ja sen liittäminen ikkunaan ei riitä. Pitää myös kertoa, mitä ohjelman halutaan tekevän, kun painiketta on painettu. Ikkunan määrittelevään luokkaan kirjoitetaan oma tapahtumankäsittelijämetodi, joka kertoo, mitä ohjelman halutaan tekevän painiketta painettaessa. Painiketta luodessa metodin nimi annetaan luokan Button konstruktorille command-nimisenä parametrina. Kun painiketta on painettu, Python-tulkki kutsuu automaattisesti sille määriteltyä tapahtumankäsittelijämetodia. T-106.1208 Ohjelmoinnin perusteet Y 12.4.2010 13 / 34

Dialogin käyttäminen Painike-esimerkkiohjelmassa halutaan, että painikkeen painaminen saa aikaan sen, että avataan uusi dialogi-ikkuna. Moduulissa tkmessagebox on valmiita funktioita, joiden avulla voi luoda dialogi-ikkunoita, joissa on haluttu otsikko ja teksti. Esimerkkiohjelmassa on käytetty moduulin metodia showinfo, joka luo tiedoteikkunan. T-106.1208 Ohjelmoinnin perusteet Y 12.4.2010 14 / 34

Painike-esimerkki, koodi from Tkinter import * import tkmessagebox class Painikeikkuna: def init (self): self.paaikkuna = Tk() self.paaikkuna.title("esimerkki 3") self.nappi = Button(self.paaikkuna, \ text = "Paina minua!", \ command = self.anna_ilmoitus) self.nappi.pack() mainloop() T-106.1208 Ohjelmoinnin perusteet Y 12.4.2010 16 / 34

Painike-esimerkki, koodi jatkuu def anna_ilmoitus(self): tkmessagebox.showinfo("vastaus", \ "Hienoa, osasit toimia oikein") oma_ikkuna = Painikeikkuna() T-106.1208 Ohjelmoinnin perusteet Y 12.4.2010 18 / 34

Syötteen lukeminen käyttäjältä Seuraavassa esimerkissä kirjoitetaan ohjelma, joka muuntaa käyttäjän fahrenheiteina antaman lämpötilan celsius-asteiksi. Tarvitsemme komponentin, jonka avulla käyttäjä voi antaa haluamansa lämpötilan. Tähän voi käyttää tekstikenttää, joka luodaan luokan Entry avulla. Kenttään kirjoitettu teksti voidaan lukea metodin get avulla. Metodi get palauttaa tekstin merkkijonona. Se pitää muuntaa desimaaliluvuksi laskemista varten. Käyttäjä ilmoittaa painiketta painamalla siitä, että hän on jo antanut luvun. Muunnoksen tekevä ohjelman osa on siis kirjoitettu painikkeen tapahtumankäsittelijämetodin sisään. Esimerkkiohjelmassa muunnoksen tulos ilmoitetaan tiedoteikkunassa. T-106.1208 Ohjelmoinnin perusteet Y 12.4.2010 19 / 34

Lämpötilamuunnos, koodi from Tkinter import * import tkmessagebox class Muunnin1: def init (self): self.paaikkuna = Tk() self.paaikkuna.title("lampotilamuunnin") self.teksti = Label(self.paaikkuna, \ text = "Fahrenheit-lampotila:") self.ruutu = Entry(self.paaikkuna, \ width = 10) self.nappi = Button(self.paaikkuna, \ text = "Muunna", \ command = self.muunna_lampotila) T-106.1208 Ohjelmoinnin perusteet Y 12.4.2010 21 / 34

Lämpötilamuunnos, koodi jatkuu self.teksti.pack() self.ruutu.pack() self.nappi.pack() mainloop() def muunna_lampotila(self): syote = self.ruutu.get() fahrenheit = float(syote) celsius = 5.0 / 9.0 * (fahrenheit - 32.0) vastausteksti = "Lampotila on %.2f C" % (celsius) tkmessagebox.showinfo("vastaus", vastausteksti) oma_ikkuna = Muunnin1() T-106.1208 Ohjelmoinnin perusteet Y 12.4.2010 23 / 34

Virheenkäsittely lämpötilamuunnokseen Muutetaan lämpötilamuunnoksen tekevää ohjelmaa niin, että se käsittelee mahdolliset virheelliset syötteet. Virheestä ilmoitetaan virhedialogi-ikkunalla. Sellainen voidaan tehdä moduulin tkmessagebox funktion showerror avulla. T-106.1208 Ohjelmoinnin perusteet Y 12.4.2010 24 / 34

Virheenkäsittely lämpötilamuunnokseen, koodi from Tkinter import * import tkmessagebox class Muunnin2: def init (self): self.paaikkuna = Tk() self.paaikkuna.title("lampotilamuunnin") self.teksti = Label(self.paaikkuna, \ text = "Fahrenheit-lampotila:") self.ruutu = Entry(self.paaikkuna, \ width = 10) self.nappi = Button(self.paaikkuna, \ text = "Muunna", \ command = self.muunna_lampotila) self.teksti.pack() self.ruutu.pack() T-106.1208 Ohjelmoinnin perusteet Y 12.4.2010 26 / 34

Virheenkäsittely lämpötilamuunnokseen, koodi jatkuu self.nappi.pack() mainloop() def muunna_lampotila(self): syote = self.ruutu.get() try: fahrenheit = float(syote) celsius = 5.0 / 9.0 * (fahrenheit - 32.0) vastausteksti = "Lampotila on %.2f C" % (celsius) tkmessagebox.showinfo("vastaus", vastausteksti) except ValueError: virheteksti = "Anna lampotila lukuna!" tkmessagebox.showerror("virhe", virheteksti) oma_ikkuna = Muunnin2() T-106.1208 Ohjelmoinnin perusteet Y 12.4.2010 28 / 34

Piirtäminen Luokan Canvas avulla voidaan luoda piirtoalusta, jolle voidaan piirtää erilaisia kuvioita, viivoja, tekstejä jne. Näin voidaan saada ohjelma tulostamaan erilaisia kaavioita tai kuvaajia. Piirtoalustan koordinaatteja lasketaan pikseleiden avulla. Vasemman yläkulman koordinaatit ovat (0, 0) Joitakin luokan Canvas metodeita. Mahdollisia parametreja on paljon erilaisia, mutta ensimmäiset parametrit kertovat ne koordinaatit, mihin komponentti piirretään: create_line piirtää suoran viivan create_polygon piirtää murtoviivan create_rectangle piirtää suorakulmion create_oval piirtää ympyrän tai ellipsin create_text piirtää tekstin T-106.1208 Ohjelmoinnin perusteet Y 12.4.2010 30 / 34

Esimerkki piirtävästä ohjelmasta from Tkinter import * class Piirtoikkuna: def init (self): self.paaikkuna = Tk() self.paaikkuna.title("piirtoesimerkki") self.piirtoalusta = Canvas(self.paaikkuna, \ width = 200, \ height = 300, \ background = "lightblue") self.piirtoalusta.pack() self.piirtoalusta.create_line(0, 0, 100, 100, \ fill = "red") self.piirtoalusta.create_rectangle(50, 50, 150, 150,\ fill = "blue") T-106.1208 Ohjelmoinnin perusteet Y 12.4.2010 32 / 34

Esimerkki piirtävästä ohjelmasta jatkuu self.piirtoalusta.create_oval(100, 100, 200, 200, \ fill = "yellow") self.piirtoalusta.create_line(70, 30, 95, 180, \ fill = "green") self.piirtoalusta.create_text(100, 250, \ text = "Hurraa!", \ fill = "brown") mainloop() oma_ikkuna = Piirtoikkuna() T-106.1208 Ohjelmoinnin perusteet Y 12.4.2010 34 / 34