729G06 Programmering och logik. Grafiska gränssnitt och eventdriven programmering del 2

Relevanta dokument
729G06 Programmering och logik. Grafiska gränssnitt och eventdriven programmering

729G75 Programmering och algoritmiskt tänkande. Grafiska gränssnitt och händelsedriven programmering

729G75 Programmering och algoritmiskt tänkande. Grafiska gränssnitt och händelsedriven programmering

Starta ett fönster... Hur håller tkinter reda på musklick? Olika sätt att organisera fönsterinnehåll. Och för att placera våra widgets

Programmering grundkurs

Grafiska användargränssnitt i Java

Idag: Centrerad utskrift. Granskning. DD1311 Programmeringsteknik med PBL. Granskning Felhantering GUI. Föreläsning 15.

Skolan för Datavetenskap och kommunikation PROGRAMMERINGSTEKNIK FÖRELÄSNING 15

Grafiska användargränssnitt i Java

Grafiska användargränssnitt i Java

Mer till P-uppgiften: Dokumentation. Nyheter. Algoritm för sökning. Mer hjälp. DD1311 Programmeringsteknik med PBL

Objektorienterad programmering Föreläsning 15. Grafiska användargränssnitt (GUI Graphical User Interface)

Skolan för Datavetenskap och kommunikation. Programmeringsteknik. Föreläsning 16

v. 42 Python HT17 En introduktion Oscar Bergqvist

v. 43 Python HT17 En introduktion Oscar Bergqvist

Windows Forms Winstrand Development

Laboration 1 Introduktion till Visual Basic 6.0

Kort om klasser och objekt En introduktion till GUI-programmering i Java

Labb LABB 1. Databassagan och en rundtur i databasers märkliga värld. Plushögskolan Frågeutveckling inom MSSQL - SU14

3.5 Visuell programmering

AssiML. Användarbeskrivning

Mer grafik. Jan Erik Moström

Hos vad? och bör därför vara instanseller klassvariabel i vilken klass?

Föreläsnings 11 - GUI, Händelsestyrda program, MVC

Objektorienterad programmering med Java Swing: Händelser, lyssnare och applets

Laboration: Whitebox- och blackboxtesting

Grafik i DrRacket AV TOMMY KARLSSON

Introduktion till programmering SMD180. Föreläsning 2: Variabler, uttryck och satser

Python. Python är, som Scheme, ett interpreterat språk men det finns kompilatorer för Python.

Malmö högskola 2007/2008 Teknik och samhälle

Windows Server containers och Hyper-V containers

Python. Python är, som Scheme, ett interpreterat språk men det finns kompilatorer för Python.

Dagens föreläsningar

Objektorienterad Programkonstruktion. Föreläsning 3 9 nov 2015

Lab5 för prgmedcl04 Grafik

Sätt att skriva ut binärträd

Design av interaktiv multimedia. Läs i förväg om det som övningarna kommer att beröra. Träna hemma både före och efter övningarna.

Föreläsning 4. Klass. Klassdeklaration. Klasser Och Objekt

Namn Stil Dokumentation Objekt-orienterad programmering OBS OBS OBS OBS OBS OBS OBS OBS

Mer om grafiska komponenter. Händelsestyrda program

Objektorienterad Programkonstruktion. Föreläsning 3 7 nov 2016

Föreläsning 5 Programmeringsteknik DD1310. Modulen doctest. Exempel. Doctest Dictionary Filhantering

Kodexempel från Programmering 2 Tobias Wrigstad, Ph.D.

729G04 Programmering och diskret matematik. Python 2: Villkorssatser, sanningsvärden och logiska operatorer

TDP002 Imperativ programmering. Laborationsmaterial emacs python-mode

4 Kolumn Kalkylbladet är uppdelat i rader (horisontellt) och kolumner (vertikalt). Där dessa möts finns alltid en cell.

729G04 Programmering och diskret matematik. Föreläsning 7

Klasser och objekt, referenser Grundkurs i programmering med Python

729G06 Programmering och logik. Info om pythondelen & introduktion till objektorienterad programmering.

Manual TorTalk Mac 1.0

Kortkommandon i COSMIC

Python. Vi har ofta behov av att behandla datastrukturer på ett enhetligt sätt så att vi kan göra samma sak i flera olika program.

Programmering och algoritmiskt tänkande. Tema 3, föreläsning 1 Jody Foo

Egna genvägar. Subhashish Pradhan T.C. Hollingsworth Översättare: Stefan Asserhäll

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 5. Laboration 4 Lådplanering Exempel på grafik, ett avancerat program Frågor

PROGRAMMERING A VB 2008 EXPRESS UTVECKLINGSVERKTYGET VISUAL BASIC

729G75: Programmering och algoritmiskt tänkande. Tema 1, föreläsning 1 Jody Foo

Några inbyggda funktioner (med resultat!) Introduktion till programmering D0009E. Föreläsning 4: Villkor och rekursion. Modulus-operatorn.

Introduktion till programmering D0009E. Föreläsning 1: Programmets väg

Current selection does not contain a unique column. Grid edit, checkbox, Edit, Copy and Delete features are not available.

BILAGA 5 Fi2Utrymmen Bilaga till CAD-kravspecifikation med förvaltningsinformation Version 1.0

Objektorienterad Programmering DAT043. Föreläsning 5 29/1-18 Moa Johansson (delvis baserat på Fredrik Lindblads material)

Eva Ansell WORD 2007 MICROSOFT FÖRDJUPNING

729G75: Programmering och algoritmiskt tänkande. Tema 1. Föreläsning 1 Jody Foo

Programmets startmeny ser ut så här. För att få fram menyerna Avsluta, Inställningar och Användare måste du föra markören upp till det blåa fältet.

Sida 1 av (9) Instruktion Word

Objektorienterad programmering med Java Swing. Programexempel. Swing och AWT AWT. = Abstract windowing toolkit

Introduktion till programmering SMD180. Föreläsning 3: Funktioner

1. FORMULÄR. A. Skapa formulär

37973 System > SQL-kommando

Introduktion till programmering SMD180. Föreläsning 4: Villkor och rekursion

Programmering, abstraktion och modellering PROJEKTFÖRELÄSNING ANDERS MÄRAK LEFFLER IDA/HCS

Mathematica. Utdata är Mathematicas svar på dina kommandon. Här ser vi svaret på kommandot från. , x

Grafiska användargränssnitt

Objektorienterad programmering Föreläsning 6. Mer om klasser och typer Namnrymder Inkapsling Synlighet Statiska variabler Statiska metoder

Programmering I Tobias Wrigstad fredag, 2009 augusti 28

Funktioner. Linda Mannila

Innehåll Introduktion... 3 InteractiveScene.config... 3 Scener <scenes>... 3 Typsnitt <fonts>... 3 Övergångar <transitions>...

JAVASCRIPT. Beteende

Automatisera uppgifter med Visual Basic-makron

Grundläggande datalogi - Övning 1

Excel kortkommando. Infoga rad, kolumn eller cell Ta bort rad, kolumn eller cell

Subversion. Laboration. Höstterminen 2008 r81. Ronny Kuylenstierna

Objektorienterad programmering i Java I

Problemlösning och funktioner Grundkurs i programmering med Python

Grafiska användargränssitt och händelsehantering

PNSPO! Exporterar och Importerar texter från CX- Designer. 20 mars 2012 OMRON Corporation

USB styrt DMX gränssnitt

Switch Driver 5. Programvara för Radio Switch, JoyBox och JoyCable. Sensory Software

Grunderna i Excel. Identifiera gränssnittsobjekt som du kan använda för att utföra vanliga uppgifter.

TDP002 - Imperativ programmering

Sophia Prosell DREAM WEAVER SKAPA OCH PUBLICERA EFFEKTIVA WEBBSIDOR

Grafik. TDDC66 Datorsystem och programmering Föreläsning 4. Peter Dalenius Institutionen för datavetenskap

Datorlaboration 1 Deskriptiv statistik med hjälp av MS Excel vers. 2010

Emacs. Eric Elfving Institutionen för datavetenskap (IDA) 22 augusti 2016

Dreamweaverskolan, Jump Meny - Formulär - Forms

LÄR DIG ANVÄNDA DIN MAC. från grunden! Nu med Mac OS X Leopard! Harry Peronius

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 3

Transkript:

729G06 Programmering och logik Grafiska gränssnitt och eventdriven programmering del 2

Översikt Repetition Widgetgenomgång Använda Grid Exempel

Fönster

Ett fönster # importera Tkinter-modulen from tkinter import * # skapa ett Tk-fönster window = Tk() # starta GUI-loopen window.mainloop() Ett fönster i Tkinter är ett objekt av typen Tk. För att utritning av fönster etc ska göras, måste man starta GUI:ts huvudloop: mainloop()

Ett fönster # importera Tkinter-modulen import tkinter as tk # skapa ett Tk-fönster window = tk.tk() # starta GUI-loopen - det är först här som fönstret syns window.mainloop() Ett fönster i Tkinter är ett objekt av typen Tk. För att utritning av fönster etc ska göras, måste man starta GUI:ts huvudloop: mainloop()

Flera fönster from tkinter import * # Skapa det första fönstret root = Tk() # Skapa det andra fönstret top = Toplevel() # Starta Tk-loopen root.mainloop() För att skapa fler än ett fönster används klassen Toplevel fönster utöver det första.

Skapa widgets # utan att spara referens Widget(parent, attribute1=v1, attribute2=v2,...) # med referensen sparad w = Widget(parent, attribute1=v1, attribute2=v2,...) När man skapar en widget, skapar en instans av en widgetklass, måste man ange dess förälder. Föräldern (parent) är ett fönster eller en widget som kan agera "container".

Button En knapp. Knappar kan ha text på Knappar kan tryckas på Knappar kan vara avstängda (disabled) https://infohost.nmt.edu/tcc/help/pubs/tkinter/web/button.html

button.py # coding: utf-8 """Demonstration av klassen Button.""" # importera Tkinter-modulen import tkinter as tk # skapa ett Tk-fönster root = tk.tk() button = tk.button(root, text="press Me!") button.pack() # starta GUI-loopen root.mainloop()

Få något att hända när man trycker på knappen Koppla beteende till en widget genom att koppla ett funktionsobjekt/metodobjekt till det. Ett funktionsobjekt/metodobjekt är "namnet" på en funktion/metod. Vi kan koppla ihop ett funktionsobjekt som ett kommando som körs när vi aktiverar en widget. Vi kan binda ihop en viss händelse relaterat till widgeten med ett funktionsobjekt.

Ange widget-kommando Man kan koppla ett kommando till vissa widgets, t.ex. knappar: button = tk.button(root, text="ok", command=do_this) där do_this är ett funktionsobjekt.

Funktions/Metodobjekt Klasser kan instansieras och producera objekt I Python kan man även behandla funktions-"namn" som objekt. En funktion: def hejsan(): print("hejsan") Ett funktionanrop: hejsan() Funktionsobjektet: hejsan

Exempel på funktionsobjekt def print_hello(): print("hello World!") bacon = print_hello bacon()

Exempel på knapp med kommando # coding: utf-8 """Demonstration av tkinter.entry.""" # importera tkinter-modulen import tkinter as tk def callback(): """Denna funktion skriver ut något när den blir anropad.""" print("something happened!") # skapa ett Tk-fönster root = tk.tk() button = tk.button(root, text="press Me!", command=callback) button.pack() # starta GUI-loopen root.mainloop()

Händelser Förrutom att vissa widgets kan ha kommandon kopplade till sig, kan olika former av interaktion med GUI:t producera händelser - events. Dessa händelser kan kopplas till funktionsobjekt. En händelse beskrivs med hjälp av en sträng, t.ex. "<Button-1>" som betyder att musknapp 1 har tryckts ner. Man binder en händelse till ett funktionsobjekt med bind()-metoden: widget.bind("<button-1>", function_object)

Händelser forts. Funktionsobjektet man binder till ett event ska ta in en instans av klassen Event som parameter: def key_handler(event): print("a key was pressed") Från ett event-objekt kan man läsa av diverse information. För mer information, läs referensmaterialet.

Exempel på händelser Nedan följer några exempel på händelser man kan binda: <Enter> när musen förs in i över en widget <Leave> när musen lämnar en widget <KeyPress> när en tangent trycks ner <KeyRelease> när en tangent åker upp igen <Button-1> när musknapp 1 trycks <Button-2> när musknapp 2 trycks

Exempel på knapp med funktionsobjekt bundet till händelse # importera tkinter-modulen import tkinter as tk def callback(): """Denna funktion skriver ut "Something happened!" när den blir anropad.""" print("something happened!") def over_me(event): """Denna funktion skriver ut "You are over me!" när den blir anropad.""" print("you are over me!") def left_me(event): """Denna funktion skriver ut "You left me!" när den blir anropad.""" print("you left me!") # skapa ett Tk-fönster root = tk.tk() button = tk.button(root, text="press Me!", command=callback) button.bind("<enter>", over_me) button.bind("<leave>", left_me) button.pack() # starta GUI-loopen root.mainloop()

Label En Label-instans används som etiketter i ett GUI. T.ex. för att berätta vad som ska skrivas i ett textfält. Man kan välja om texten i Labeln ska var centrerad eller höger- eller vänsterjusterad. Standard är vänsterjusterad.

Entry Ett Entry är ett textfält som har en rad. Vi läser från ett entry genom att anropa på dess metod get() Vi ändrar texten som står i ett entry genom att använda metoderna insert() och delete(). insert() behöver ett start-index och en sträng, t.ex. entry1.insert(0, "hej") delete() behöver ett start-index. Läs mer i referenslitteraturen.

Frame En behållare (eng container) för andra widgets. Ett användningsområde för Frames är att gruppera widgets. T.ex. kan flera widgets läggas in i en frame. Sen lägger man till den frame:n till ett fönster.

Layout Det finns sätt att bestämma hur widgets ska organiseras i en container. Följande metoder kan användas för att placera ut pack grid place Vi ska koncentrera oss på grid.

Grid Vi lägger ut våra widgets i en matris/tabell/rutnät. Matrisen har rader och kolumner av celler. En widget placeras på en viss rad, i en viss kolumn. En widget kan uppta en eller fler rader eller kolumner.

Exempel på label, textfält och knapp 0 1 0 The best game character ever 1 Name Bob 2 Game Bob's Great Adventure 3 Ok

Grid forts En widget kan sträcka sig över fler än en rad/kolumn. Vi kan fästa en widget i t.ex. ett hörn eller vid en kant där den stannar om en cell skulle vara större än den widget som finns inuti den. Läs mer om Grid i referensmaterialet.

Exempel på label, textfält och knapp 0 1 0 The best game character ever 1 Name Bob 2 Game Bob's Great Adventure 3 Ok

Layout med grid() # coding: utf-8 """Layout med grid.""" import tkinter as tk # Framen läggs automatisk in i en tk.tk() frame = tk.frame() # placera frame i fönstret med hjälp av pack() frame.pack() # titel-label title_label = tk.label(frame, text="the best game character ever", background="red") title_label.grid(row=0, column=0, columnspan=2, sticky=tk.e+tk.w+tk.n+tk.s) # namn-label name_label = tk.label(frame, text="name") name_label.grid(row=1, column=0, sticky=tk.nw) # name-textfält name_entry = tk.entry(frame) name_entry.grid(row=1, column=1, sticky=tk.nw) # game-label game_label = tk.label(frame, text="game") game_label.grid(row=2, column=0, sticky=tk.nw) # name-textfält game_entry = tk.entry(frame) game_entry.grid(row=2, column=1, sticky=tk.nw) # knapp button = tk.button(frame, text="ok") button.grid(row=3, column=1, sticky=tk.se) frame.mainloop()

Radiobutton En grupp av knappar där endast en kan vara aktiv. Knappar grupperas ihop genom att de tilldelas samma Tk-variabel att lagra sitt värde i. Ett funktionsobjekt kan anges som ett kommando till varje radioknapp.

Tk-variabler Tk-variabler är objekt av som Tkinter använder för att lagra värden. T.ex. finns StringVar som tar hand om strängar IntVar som tar hand om int:ar Exempel: s = tk.stringvar() s.set("hej") print(s.get()) Referens: https://infohost.nmt.edu/tcc/help/pubs/tkinter/web/ control-variables.html

Exempel på radio-knappar # coding: utf-8 """Demonstration av klassen Radiobutton.""" import tkinter as tk root = tk.tk() def radio(): """Skriv ut värdet hos radio-knappen.""" print(radio_value.get()) # Tk-variabel att lagra radioknapp-gruppens värde i radio_value = tk.stringvar() radio_value.set("inget valt") # knapp 1 radio_button1 = tk.radiobutton(root, text="hejsan", variable=radio_value, value="hejsan", command=radio) radio_button1.pack() # knapp 2 radio_button2 = tk.radiobutton(root, text="hoppsan", variable=radio_value, value="hoppsan", command=radio) radio_button2.pack() # knapp 3 radio_button3 = tk.radiobutton(root, text="svejsan", variable=radio_value, value="svejsan", command=radio) radio_button3.pack() root.mainloop()

Checkbutton En knapp som antingen är på eller av. Värdet avläses från en Tkinter-variabel (IntVar) som man kopplar till knappen.

Tk-variabler forts En Tk-variabel kan ropa på ett funktionsobjekt när förändring sker, antingen när någon läser från den, eller när någon skriver till den. Exempel: def hello(name, index, mode): print(v.get()) v = tk.stringvar("eggs") v.trace('w', hello) v.set("bacon")

Exempel: Checkbox checkbox.py

Exempel turtleapp.py

Exempel optionmenu.py