Zaawansowany kurs języka Python



Podobne dokumenty
Zaawansowany kurs języka Python

Kurs języka Python. Wykład 5. Marcin Młotkowski. 9 listopada Rodzaje parametrów funkcji. 2 Biblioteka Tk. 3 Układanie kontrolek w oknie

Programowanie obiektowe

Systemy operacyjne na platformach mobilnych 2 Programowanie aplikacji z graficznym interfejsem użytkownika w GTK+

Zaawansowany kurs języka Python

Kurs rozszerzony języka Python

Zaawansowany kurs języka Python

Programowanie i projektowanie obiektowe

Zaawansowane aplikacje WWW - laboratorium

Zaawansowany kurs języka Python

Programowanie obiektowe

Instrukcja laboratoryjna cz.3

Narzędzia i aplikacje Java EE. Usługi sieciowe Paweł Czarnul pczarnul@eti.pg.gda.pl

Instrukcja laboratoryjna nr.4

Dekoratora używa się wstawiając linijkę zaczynającą się przed definicją dekorowanego obiektu (klasy czy funkcji).

Programowanie Obiektowe GUI

Kurs rozszerzony języka Python

Programowanie obiektowe zastosowanie języka Java SE

Kurs rozszerzony języka Python

Java: otwórz okienko. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak

Kurs rozszerzony języka Python

Wykład 4 Delegat (delegate), właściwości indeksowane, zdarzenie (event) Zofia Kruczkiewicz

Java niezbędnik programisty spotkanie nr 12. Graficzny interfejs użytkownika

Programowanie współbieżne Zadanie 5 - Podstawowe problemy programowania współbieżnego

Programowanie obiektowe

Programowanie obiektowe

Sposoby tworzenia projektu zawierającego aplet w środowisku NetBeans. Metody zabezpieczenia komputera użytkownika przed działaniem apletu.

Metaprogramowanie w Ruby

WYKONANIE APLIKACJI OKIENKOWEJ OBLICZAJĄCEJ SUMĘ DWÓCH LICZB W ŚRODOWISKU PROGRAMISTYCZNYM. NetBeans. Wykonał: Jacek Ventzke informatyka sem.

Podstawy Pythona. Krzysztof Gdawiec. Instytut Informatyki Uniwersytet Śląski

- Narzędzie Windows Forms. - Przykładowe aplikacje. Wyższa Metody Szkoła programowania Techniczno Ekonomiczna 1 w Świdnicy

Kurs języka Python. Wykład 14. Marcin Młotkowski. 25 stycznia Python i Apache Pythonowe platformy aplikacyjne. Dystrybucja aplikacji w U*IX

Technologie informacyjne: Excel i Python

Wprowadzenie do projektu QualitySpy

Międzyplatformowy interfejs systemu FOLANessus wykonany przy użyciu biblioteki Qt4

rozdział 1: WSTĘP DO PROGRAMOWANIA WIZUALNEGO

Delphi podstawy programowania. Środowisko Delphi

Temat 1. Podstawy Środowiska Xcode i wprowadzenie do języka Objective-C

Przegląd języka Python. Łukasz Anwajler

MentorGraphics ModelSim

Rys. 1. Główne okno programu QT Creator. Na rysunku 2 oznaczone zostały cztery przyciski, odpowiadają kolejno następującym funkcjom:

Programowanie Strukturalne i Obiektowe Słownik podstawowych pojęć 1 z 5 Opracował Jan T. Biernat

Programowanie obiektowe

Programowanie w środowisku graficznym GUI


Zaawansowany kurs języka Python

Implementacja aplikacji sieciowych z wykorzystaniem środowiska Qt

Programowanie obiektowe

Kurs języka Python. Wątki

Programowanie obiektowe. Literatura: Autor: dr inŝ. Zofia Kruczkiewicz

Scenariusz lekcji. Scenariusz lekcji 1 TEMAT LEKCJI: 2 CELE LEKCJI: 2.1 Wiadomości: 2.2 Umiejętności: 3 METODY NAUCZANIA: 4 ŚRODKI DYDAKTYCZNE:

1. Wybierz File New Application. Pojawi się nowa aplikacja w Delphi.

Programowanie obiektowe

Programowanie obiektowe i zdarzeniowe wykład 4 Kompozycja, kolekcje, wiązanie danych

PHP 5 język obiektowy

Cechy systemu X Window: otwartość niezależność od producentów i od sprzętu, dostępny kod źródłowy; architektura klient-serwer;

Zaawansowane aplikacje internetowe - laboratorium

Programowanie obiektowe

Zaawansowany kurs języka Python

Języki i metody programowania Java Lab2 podejście obiektowe

Podstawy Programowania 2

GLKit. Wykład 10. Programowanie aplikacji mobilnych na urządzenia Apple (IOS i ObjectiveC) #import "Fraction.h" #import <stdio.h>

UML a kod w C++ i Javie. Przypadki użycia. Diagramy klas. Klasy użytkowników i wykorzystywane funkcje. Związki pomiędzy przypadkami.

Języki i metody programowania Java. Wykład 2 (część 2)

Aplikacje internetowe i rozproszone - laboratorium

Laboratorium 1 Temat: Przygotowanie środowiska programistycznego. Poznanie edytora. Kompilacja i uruchomienie prostych programów przykładowych.

WxPython jest platformą pozwalającą tworzyd aplikacje okienkowe nie tylko dla systemu Windows ale i Mac czy Unix.

Zasady programowania Dokumentacja

Dokumentacja do API Javy.

1 Atrybuty i metody klasowe

Serwery Statefull i Stateless

Programowanie w języku C++

Java Podstawy. Michał Bereta

Politechnika Gdańska Katedra Optoelektroniki i Systemów Elektronicznych

Visual Studio instalacja

Architektura interfejsu użytkownika

Specyfikacja API Runtime BAS 3.0

Praktyka programowania projekt

JAVA. Java jest wszechstronnym językiem programowania, zorientowanym. apletów oraz samodzielnych aplikacji.

Budowa aplikacji z graficznym interfejsem użytkownika - GUI (Graphic User Interface)

Programowanie w Sieci Internet filtry oraz web.xml. Kraków, 11 stycznia 2013 r. mgr Piotr Rytko Wydział Matematyki i Informatyki

Podstawy Swing. Tomasz Borzyszkowski

Laboratorium 9 (Więcej Aktywności, w Androidzie)

Projektowanie obiektowe. Roman Simiński Polimorfizm

Java - interfejs graficzny

Założenia projektu: Projekt ma zadanie pokazać praktyczne zastosowanie App Inventor 2, poprzez stworzenie prostej aplikacji do nauki słówek.

Programowanie zaawansowane

Wywoływanie metod zdalnych

Wywoływanie metod zdalnych

akademia androida Składowanie danych część VI

Kurs języka Python. Wykład 11. Marcin Młotkowski. 4 stycznia Kontrola poprawności podczas biegu programu. 2 Testowanie oprogramowania

Języki i techniki programowania Ćwiczenia 4 Wzorce

1. Czynności przygotowujące aplikację działającą na platformie Java SE Biblioteka5 (należy ją pobrać z załącznika z p.1)

D:\DYDAKTYKA\ZAI_BIS\_Ćwiczenia_wzorce\04\04_poprawiony.doc 2009-lis-23, 17:44

Język JAVA podstawy. wykład 2, część 1. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Laboratorium 1. Programowanie II - Kierunek Informatyka. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej

Common Lisp - funkcje i zmienne

Dodanie nowej formy do projektu polega na:

Transkrypt:

Środowisko GTK+, dekoracja kodu, dynamiczna kompilacja 22 listopada 2013

Plan wykładu 1 GUI w Pythonie: GTK+ Wprowadzenie do GTK+ PyGTK 2 3 4

Wprowadzenie do GTK+ PyGTK Plan wykładu 1 GUI w Pythonie: GTK+ Wprowadzenie do GTK+ PyGTK 2 3 4

Wprowadzenie do GTK+ PyGTK Biblioteki okienkowe w Pythonie curses: interfejs tekstowy Tkinter (Tk interface): biblioteka okienkowa Tk + Tix (Tk extension) Pygtk, pygnome: API do środowiska Gtk/Gnome PyQT: API do QT wxwindows OpenGL PyWin32

Wprowadzenie do GTK+ PyGTK GTK+/GNU GTK+ The GIMP Toolkit GNOME GNU Network Object Model Environment

Wprowadzenie do GTK+ PyGTK Moduły towarzyszące Moduły współistniejące z GTK+ GObject ATK Pango Cairo Glade

Wprowadzenie do GTK+ PyGTK Środowisko GTK+ Elementy składowe okna; kontrolki; zdarzenia

Wprowadzenie do GTK+ PyGTK Okna i kontrolki Rola kontrolki (bardzo nieformalnie): kontrolka ma być (najlepiej ładna); kontrolka czasem ma reagować, np. na kliknięcie myszą; kontrolka czasem może zawierać inne kontrolki.

Wprowadzenie do GTK+ PyGTK Hierarchia kontrolek (uproszczone) Widget Container

Wprowadzenie do GTK+ PyGTK GTK+ i Python Biblioteka PyGTK Współczesność (przeszłość?) PyGTK obecnie łączy Pythona 2.* i GTK+ 2.0, zapowiadany jest koniec tej biblioteki.

Wprowadzenie do GTK+ PyGTK GTK+ i Python Biblioteka PyGTK Współczesność (przeszłość?) PyGTK obecnie łączy Pythona 2.* i GTK+ 2.0, zapowiadany jest koniec tej biblioteki. Przyszłość Biblioteka PyGObject: łączy GTK+ 3.0 i Pythona 2.6/3(3.1)

Wprowadzenie do GTK+ PyGTK PyGTK: podstawowe elementy Biblioteka się nazywa gtk.

Wprowadzenie do GTK+ PyGTK PyGTK: podstawowe elementy Biblioteka się nazywa gtk. W bibliotece są odpowiednie klasy Window, Entry, Button etc.

Plan wykładu GUI w Pythonie: GTK+ 1 GUI w Pythonie: GTK+ Wprowadzenie do GTK+ PyGTK 2 3 4

Przykładowa aplikacja Specyfikacja Aplikacja powinna: rysować zadane figury; podpisywać rysunki; kończyć pracę po kliknięciu klawisza na przycisk koniec.

Budowanie okna GUI w Pythonie: GTK+ class Rysownik(gtk.Window): def init (self): super(rysownik, self). init () self.set title( Rysujemy obrazki ) self.set position(gtk.win POS CENTER) self.connect( destroy, gtk.main quit) self.kontrolki() self.show all()

Uruchomienie aplikacji r = Rysownik() gtk.main()

Efekt

Dokładanie kontrolek Window jest kontrolką widzialną ; Window jest też kontenerem, można wstawić element; do Window można wstawić tylko jeden element.

Pudełka GUI w Pythonie: GTK+ Do układania elementów służą pudełka pionowe i poziome.

Pudełka GUI w Pythonie: GTK+ Do układania elementów służą pudełka pionowe i poziome. gtk.box: gtk.vbox i gtk.hbox.pack start(widget, expand, fill, padding).pack end(widget, expand, fill, padding) gdzie expand(bool): kontrolki włożone do pudełka mają wypełniają całe pudełko, wypełnieniem jest pusta przestrzeń; fill (bool): kontrolki wypełniają całą przestrzeń, ale przy okazji powiększane są kontrolki; padding (int): dodatkowy odstęp od sąsiada

Ilustracja pakowania

Parę uwag dodatkowych Pudełka można pakować w pudełka (pionowe w poziome, poziome w pionowe etc)

Parę uwag dodatkowych Pudełka można pakować w pudełka (pionowe w poziome, poziome w pionowe etc) Alternatywa: gtk.table Kratka komórek, do których wkłada się kontrolki.

Wprowadzanie tekstu gtk.entry.get text(): pobranie tekstu z bufora kontrolki;.set text( text ): wyczyszczenie bufora i wstawienie tekstu;.insert text( insert, pos): wstawienie tekstu od pos.

Przyciski GUI w Pythonie: GTK+ gtk.button( tekst ) endb = gtk.button( Koniec ) endb.connect( clicked, lambda x: self.destroy())

Sygnały (ang. signals) Sygnał w GTK+ Informacja, że zaszło jakieś zdarzenie, np. kliknięcie przycisku, likwidacja jakiejś kontrolki.

Sygnały (ang. signals) Sygnał w GTK+ Informacja, że zaszło jakieś zdarzenie, np. kliknięcie przycisku, likwidacja jakiejś kontrolki. Sygnały są związane z kontrolkami. Sygnały mają swoje nazwy.

Funkcje zwrotne (ang. callbacks) Funkcje zwrotne to są funkcje wywoływane jako reakcja na sygnały.

Funkcje zwrotne (ang. callbacks) Funkcje zwrotne to są funkcje wywoływane jako reakcja na sygnały. Postać funkcji zwrotnej def funkcja zwrotna(kontrolka, dane)

Funkcje zwrotne (ang. callbacks) Funkcje zwrotne to są funkcje wywoływane jako reakcja na sygnały. Postać funkcji zwrotnej def funkcja zwrotna(kontrolka, dane) Łączenie kontrolek, sygnałów i funkcji zwrotnych kontrolka.connect( nazwa sygnału, funkcja zwrotna, dane)

Są jeszcze zdarzenia: Events.

Są jeszcze zdarzenia: Events. Ale nie będę o nich mówił.

Co to jest GUI w Pythonie: GTK+ Cairo Biblioteka 2D, z której można korzystać w GTK+ i Pythonie.

W bardzo wielkim skrócie Miejsce do malowania Kontrolka gtk.drawingarea().

Rysowanie na ekranie najpierw tworzy się ścieżkę za pomocą tzw. CairoContext: cairo context = drawing area.window.cairo create() następnie rysuje się po ścieżce: cairo context.stroke()

Co to jest GUI w Pythonie: GTK+ Glade to graficzne narzędzie do projektowania interfejsów dla środowiska GTK+/GNOME.

Schemat działania (Glade-3) Glade produkuje plik XML, w którym jest opisany interfejs; Aplikacja wczytuje ten plik i buduje interfejs; Glade-3 jest niezależny od języka.

Użycie projektu GUI w Pythonie: GTK+ GtkBuilder Biblioteka budująca z XML interfejs graficzny.

Użycie projektu GUI w Pythonie: GTK+ GtkBuilder Biblioteka budująca z XML interfejs graficzny. libglade Poprzednia biblioteka, używa innego, niekompatybilnego XML a.

Użycie projektu GUI w Pythonie: GTK+ GtkBuilder Biblioteka budująca z XML interfejs graficzny. libglade Poprzednia biblioteka, używa innego, niekompatybilnego XML a. Konwersja plików gtk builder convert

Budowanie okna GUI w Pythonie: GTK+ Ważne Trzeba pamiętać, że kontrolki mają swoje nazwy.

Budowanie okna GUI w Pythonie: GTK+ Ważne Trzeba pamiętać, że kontrolki mają swoje nazwy. builder = gtk.builder() builder.add from file( wyklad.glade ) window = builder.get object( okno ) window.show() gtk.main()

Podłączanie sygnałów Ważne Podczas budowania interfejsu trzeba wskazać, jakim sygnałom odpowiadają jakie procedury obsługi (handlery).

Podłączanie sygnałów Ważne Podczas budowania interfejsu trzeba wskazać, jakim sygnałom odpowiadają jakie procedury obsługi (handlery). builder = gtk.builder() builder.add from file( wyklad.glade ) builder.connect signals({ on window destroy : gtk.main quit }) window = builder.get object( okno ) window.show() gtk.main()

Podłączanie menu GUI w Pythonie: GTK+ Łatwe Tak samo jak w przypadku innych sygnałów.

Podłączanie menu GUI w Pythonie: GTK+ Łatwe Tak samo jak w przypadku innych sygnałów. Dokładniej: trzeba w Glade wskazać procedurę obsługi (wpisać jej nazwę) dla sygnału activated ; powiązać nazwę z prawdziwą procedurą: builder.connect signals({ on window destroy : gtk.main quit, on menu koniec : lambda widget : akcja(widget) })

Bardziej obiektowo GUI w Pythonie: GTK+ class Rysownik: def init (self): builder = gtk.builder() builder.add from file( wyklad.glade ) self.window = builder.get object( okno ) builder.connect signals(self) def on window destroy(self, widget, data=none): pass def koniec(self, widget): pass rysunek = Rysownik() rysunek.window.show() gtk.main()

GUI w Pythonie: GTK+ Inne narzędzie (napisane w PyGTK) do projektowania interfejsów graficznych, produkuje pliki zgodne z GtkBuilder.

GUI w Pythonie: GTK+ Inne narzędzie (napisane w PyGTK) do projektowania interfejsów graficznych, produkuje pliki zgodne z GtkBuilder. Kiwi Z projektem jest związana biblioteka Kiwi (napisana w Pythonie), która w założeniu ma być lepszym GTK+.

Plan wykładu 1 GUI w Pythonie: GTK+ Wprowadzenie do GTK+ PyGTK 2 3 4

Wprowadzenie GUI w Pythonie: GTK+ badanie stanu obiektu badanie stanu obliczeń

Funkcja standardowa dir() Co robi dir (przypomnienie) Zwraca listę dostępnych nazw. Jeśli nie podano argumentu, to podaje listę symboli w lokalnym słowniku.

Funkcja standardowa dir() Co robi dir (przypomnienie) Zwraca listę dostępnych nazw. Jeśli nie podano argumentu, to podaje listę symboli w lokalnym słowniku. >>> dir(1) [ abs, add, and, class, cmp,... ]

Analiza biegu programu dir() lista zmiennych lokalnych locals() lokalny słownik zmiennych globals() globalny słownik: klasy, funkcje etc.

Dynamiczne wykonywanie programu Instrukcja exec (Python 2.*) exec print 2 + 2 exec open( foo.py ) Funkcja eval() print eval( 2*2 )

Dynamiczne wykonywanie programu Instrukcja exec (Python 2.*) exec print 2 + 2 exec open( foo.py ) Funkcja eval() print eval( 2*2 ) Python 3.* exec nie jest już instrukcją, jest funkcją: exec(string lub kod, globals, locals)

Wbudowana funkcja compile(źródło, typ źródła, typ kodu) zwraca obiekt reprezentujący skompilowany kod. Przykład x = 10 code = compile( print x\nprint 2*x, <string>, exec ) exec code

Problem z kontekstem wywołania Skompilowanie kodu x = 10 code = compile( print x\nprint 2*x, <string>, exec ) wykonaj(code) def wykonaj(kod): exec kod

Przekazanie kontekstu wywołania Skompilowanie kodu x = 10 code = compile( print x\nprint 2*x, <string>, exec ) wykonaj(code) def wykonaj(code): loc = { x : 5} exec code in loc

Plan wykładu 1 GUI w Pythonie: GTK+ Wprowadzenie do GTK+ PyGTK 2 3 4

Rozszerzanie właściwości funkcji def szalenie skomplikowana funkcja(arg1, arg2, arg3):... Śledzenie wywołania funkcji Chcemy śledzić wywołania zaimplementowanych funkcji, tj. informacje o wywołaniu oraz informacja o argumentach wywołania. Bez ingerowania w te funkcje.

Schemat rozwiązania Rozwiązanie 1. def log foo(*args): print Wywoływana funkcja: foo z argumentami, args return foo(*args)

Schemat rozwiązania Rozwiązanie 1. def log foo(*args): print Wywoływana funkcja: foo z argumentami, args return foo(*args) Co z tym zrobić 1. Zamiast foo używamy log foo.

Schemat rozwiązania Rozwiązanie 1. def log foo(*args): print Wywoływana funkcja: foo z argumentami, args return foo(*args) Co z tym zrobić 1. Zamiast foo używamy log foo. Co z tym zrobić 2. foo = log foo

Uniwersalna funkcja opakowująca inne funkcje def log(fun): def opakowanie(*args): print funkcja:, fun. name, argumenty, args return fun(*args) return opakowanie

Uniwersalna funkcja opakowująca inne funkcje def log(fun): def opakowanie(*args): print funkcja:, fun. name, argumenty, args return fun(*args) return opakowanie Zastosowanie foo = log(foo)

def log(fun): def opakowanie(*args): print funkcja:, fun. name, argumenty, args return fun(*args) return opakowanie

def log(fun): def opakowanie(*args): print funkcja:, fun. name, argumenty, args return fun(*args) return opakowanie Zastosowanie @log def foo(args):...

standardowe Dekorowanie programów wielowątkowych from threading import Lock my lock = Lock() @synchronized(my lock) def critical1():... @synchronized(my lock) def critical2():...

Implementacja dekoratora def synchronized(lock): def wrap(f): def new function(*args, **kw): lock.acquire() try: return f(*args, **kw) finally: lock.release() return new function return wrap