Behandlar grafik med Tkinter.
I vanliga fall när vi importerar moduler brukar vi göra på följande sätt:
import random print random.randrange(10)
För att slippa skriva random före varje anrop till en funktion i random kan man istället importera modulen på följande vis:
from random import * print randrange(10)
Detta har vi nytta av när vi ska skapa grafiska program eftersom vi då måste använda väldigt många klasser och metoder som ligger i en modul som heter Tkinter. Då vill vi slippa skriva Tkinter hela tiden. Därför inleder vi programmen såhär:
from Tkinter import *
För att få en överblick över Tkinter kommer här en lista på några av de klasser (med tillhörande metoder och attribut) som finns i modulen. Långt ifrån alla klasser, metoder och attribut är med i denna lista men det här är förmodligen de du kommer att ha störst användning för.
Tk
- för att skapa ett fönster
title(fönsternamn)
geometry(fönsterstorlek)
mainloop()
Label
- en textruta
text
Button
- en knapp
text
command
width
Entry
- en textruta där användaren kan skriva text
get()
delete(start,stop)
insert(start,text)
textVariable
Text
- en textruta med flera rader
get()
delete(start,stop)
insert(start,text)
textVariable
wrap
RadioButton
- för att skapa ett alternativ i en grupp där endast ett alternativ kan väljas åt gången (ex Kön: Man / Kvinna)
text
variable
value
command
Canvas
- en yta som man kan rita på
create_line()
create_oval()
create_rectangle(x,y,bredd,hojd)
width
height
Frame
- kan innehålla andra grafikobjektHär kommer några exempel på hur man använder sig av klasserna i Tkinter.
from Tkinter import * def klickat(): global c c += 1 knapp["text"] = str(c)+" klick" c = 0 t = Tk() knapp = Button(t,text="Klicka", command=klickat) knapp.grid() t.mainloop()
from Tkinter import * KONSONANTER = ('B','C','D','F','G','H','J','K','L','M','N','P', 'Q','R','S','T','V','W','X','Y','Z') def kryptera(): texten = textruta.get(0.0,END) nytext = "" for bokstav in texten: if bokstav.upper() in KONSONANTER: nytext += bokstav + "o" + bokstav else: nytext += bokstav textruta.delete(0.0,END) textruta.insert(0.0,nytext) rot = Tk() rubrik = Label(rot,text="Ange en text") #textruta = Entry(rot) textruta = Text(rot) knapp = Button(rot,text="Kryptera",command=kryptera) rubrik.grid() textruta.grid() knapp.grid() rot.mainloop()
from Tkinter import * def valjer(): entResultat.delete(0,END) entResultat.insert(0,"Du är en "+kon.get()+"!") rot = Tk() kon = StringVar() Label(rot,text="Kön:").pack(anchor=W) Radiobutton(rot,variable=kon,value="man",text="Man",command=valjer).pack(anchor=W) Radiobutton(rot,variable=kon,value="kvinna",text="Kvinna",command=valjer).pack(anchor=W) entResultat = Entry(rot,text="Inget kön valt") entResultat.pack() rot.mainloop()
from Tkinter import * rot = Tk() c = Canvas(rot, width=200, height=350) c.create_oval(50,50,90,100) c.create_oval(110,50,150,100) c.create_rectangle(25,25,175,325) c.pack() rot.mainloop()
För att programmen inte ska bli så röriga när man har många grafiska objekt så kan man skapa klasser som ärver av Frame
och som på så sätt
kan innehålla grafiska objekt. Detta är även väldigt bra för att kunna återanvända delar av sin kod. Exemplet nedan gör samma sak som första exemplet, det räknar antalet klick,
men det gör det i en klass.
from Tkinter import * class Application(Frame): def __init__(self,master): Frame.__init__(self,master) self.grid() self.skapa_saker() self.antal_klick = 0 def skapa_saker(self): self.btn1 = Button(self,text="Klicka här", command=self.klickat) self.btn1.pack() def klickat(self): self.antal_klick += 1 self.btn1["text"] = str(self.antal_klick) + " klick" rot = Tk() app = Application(rot) rot.mainloop()