DD1312
Programmeringsteknik
Föreläsning 15 GUI del 1
Skolan för Datavetenskap och kommunikation
idag
Grafiska gränssnitt - GUI (Graphical User Interface)
Tkinter
Tillstånd
Komponenter
Layout
Händelser
exempel
...finns i Dropbox, se länken "GUI-exempel"
tkinter
textbaserat program
start
inläsning
beräkning
utskrift
avslutning
tillstånd
användare = "elev"
tillstånd - graf
inloggning
vy elev
fel
vy rektor
vy lärare
klasser i tkinter
Modulen tkinter, har klasser för grafiska komponenter.
Button | Menu |
Canvas | Menubutton |
Checkbutton | Message |
Entry | Radiobutton |
Frame | Scale |
Label | Scrollbar |
Listbox | Text |
from tkinter import *
roten = Tk()
knapp = Button(roten, text="Tryck")
knapp.pack()
roten.mainloop()
enklast.py
from tkinter import *
roten = Tk()
knapp = Button(roten, text="Tryck")
knapp.pack()
roten.mainloop()
Hämtar alla klasser i modulen Tkinter.
Knappen placeras ut.
Button-konstruktorn - skapar en knapp.
Tk-konstruktorn - skapar rotfönstret.
Startar en slinga som väntar på inmatning från användaren.
att använda komponenter
knapp = Button(roten,text="Handla")
att ändra attribut
Varje komponent fungerar som en dictionary med attributen som nycklar. Ändra attributets värde så här:
knapp["width"] = 9
OBS! Attributets namn ("width") står inom citattecken.
config
Vill du ändra flera attribut?
Använd metoden config
knapp.config(bg = "lightblue",\
height = 3,\
width = 9,\
font = ('times', 20, 'italic'))
Här ändrar vi knappens färg, storlek, och font.
OBS! Attributets namn står inte inom citattecken här.
finare.py
command
OBS! Funktionsnamnet
(inte anrop)
from tkinter import *
def byttext():
knapp["text"] = "Aj!"
roten = Tk()
knapp = Button(roten, text="Tryck inte")
knapp["command"] = byttext
knapp.pack()
roten.mainloop()
parametrar då?
lambda-funktion
Vanlig funktion | Lambdafunktion |
def dubbla(x): return 2*x | dubbla = lambda x : 2*x |
Parameter
Returvärde
from tkinter import *
def byttext(t):
knapp["text"] = t
roten = Tk()
knapp = Button(roten,text = "Tryck inte")
nytt = "Aj!"
knapp["command"] = lambda: byttext(nytt)
knapp.pack()
roten.mainloop()
byttext.py
lambda i command
DD1312
Programmeringsteknik
Föreläsning 15 GUI del 2
Skolan för Datavetenskap och kommunikation
layout
knapp.pack()
knapp.grid(row=4, column=3)
saga1.py ... saga7.py
Rubrik | | | |
Person: | | | |
Plats: | | | |
Verb: | | | |
Adjektiv: | | | |
Varelse: | | | |
Skriv saga | | | |
0 1 2 3
0
1
2
3
4
5
6
etikett1 = Label(roten, text="Person:")
etikett2 = Label(roten, text="Plats:")
etikett3 = Label(roten, text="Verb:")
roten.grid()
etikett1.grid(row=1, column=0)
etikett2.grid(row=2, column=0)
etikett3.grid(row=3, column=0)
variabler
s = StringVar()
...så kan man koppla ihop variabel och komponent med
knapp["variable"] = s
adj1 = StringVar()
kryssruta1 = Checkbutton(roten, text="modig")
kryssruta1["variable"] = adj1
kryssruta1["onvalue"] = " modig "
...
adjektiv = adj1.get()
felhantering i tkinter
exempel
from tkinter import *
from tkinter import messagebox
rot = Tk()
try:
x = 1/0
except ZeroDivisionError:
messagebox.showerror(title="Mattefel",\
message="Försökte dela med 0.")
rot.mainloop()
message.py
Dokumentation
TkDocs https://tkdocs.com/tutorial/index.html
Välj "Python" under Tutorial till höger på sidan