You are on page 1of 9

Korisnicka sucelja: peta lekcija

Fizicki odsjek, PMF, Sveuciliste u Zagrebu


2014/2015

wxPython prozori, gumbi i kontrole


wxPython windows . . . . . . . . . . .
wxPython widgets: kontrole . . . . .
wxPython widgets: kontrole . . . . .
wxPython widgets: kontrole . . . . .
wxPython i matplotlib (a) . . . . . . .
wxPython i matplotlib (b). . . . . . .
wxPython i Tetris (a) . . . . . . . . . .
wxPython i Tetris (b) . . . . . . . . . .
Mandelbrotov skup u wxPythonu . .
Multithreading . . . . . . . . . . . . . .
Multiple threads on multiple CPU .
Multiple threads on single CPU . . .
Sinhronizacija dretvi i deadlocks. . .
Program s dretvom . . . . . . . . . . .

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

wxPython prozori, gumbi i kontrole

Neki elementi wxPythona su: wx.Window, wx.Panel, wx.ScrolledWindow, wx.SplitterWindow, wx.grid.Grid,


wx.Frame, wx.Dialog, wx.MiniFrame, wx.MDIParentFrame, wxMDIChildFrame, wx.StatusBar, wx.ToolBar,
wx.Notebook, wx.html.HtmlWindow,
wx.Button, wx.BitmapButton, wx.RadioBox, wx.RadioButton, wx.CheckBox, wx.Choice, wx.ComboBox,
wx.SpinButton, wx.ToogleButton, wx.calendar.CalendarCtrl,
wx.ListBox, wx.CheckListBox, wx.Gauge, wx.Slider, wx.StaticBox, wx.ListCtrl, wx.TreeCtrl, ...
Ovaj slide (i svi do br. 7) nece biti na testu, ali je vazan za dojam o imenima i strukturama koje su sastavni
dio wxPythona.

2014/2015 GB

2 / 16

wxPython windows

wx.Window: prozor opce namjene

wx.Panel

wx.ScrolledWindow

wx.SplitterWindow: moze biti horizontalna i vertikalna podjela, granica prozora se moze vuci i tako
mijenjati prostor koji zauzima svaki dio prozora

wx.grid.Grid: tablica i tablicni kalkulator

2014/2015 GB

3 / 16

wxPython widgets: kontrole

wx.Frame: kontejner za druge prozore

wx.Dialog

wx.MiniFrame

wx.MDIParentFrame, wxMDIChildFrame

wx.StatusBar

wx.ToolBar

wx.Notebook

wx.html.HtmlWindow

2014/2015 GB

4 / 16

wxPython widgets: kontrole

wx.Button, wx.BitmapButton

wx.RadioBox, wx.RadioButton

wx.CheckBox

wx.Choice

wx.ComboBox

wx.SpinButton

wx.ToogleButton

wx.calendar.CalendarCtrl

2014/2015 GB

5 / 16

wxPython widgets: kontrole

wx.ListBox

wx.CheckListBox

wx.Gauge

wx.Slider

wx.StaticBox

wx.ListCtrl

wx.TreeCtrl

ima ih jos

2014/2015 GB

6 / 16

wxPython i matplotlib (a)

Eli Bendersky je napisao wxPython aplikaciju wx mpl bars.py koja crta histogram u matplotlibu:

2014/2015 GB

7 / 16

wxPython i matplotlib (b)

Eli Bendersky je napisao i wxPython aplikaciju wx mpl dynamic graph.py koja crta graf u trenutku
izvrsavanja programa:

2014/2015 GB

8 / 16

wxPython i Tetris (a)

Eli Bendersky je napisao i wxPython verziju poznate racunalne igre Tetris. Taj program mozete downloadati
sa ovog Moodle tecaja.

2014/2015 GB

9 / 16

wxPython i Tetris (b)

Upute za igricu se nalaze u izborniku Help. Najveci dio programa se nalazi u direktoriju lib.

Igricu Tetris u wxPythonu je napisao i Jan Bodnar: tetris.py

2014/2015 GB

10 / 16

Mandelbrotov skup u wxPythonu

Programi mandelbrot.py i mandelbrotwx.py crtaju fraktale u wxPythonu.

Program mandelbrotwx.py je stariji i pisan je jos dok numpy (i njegov prethodnik paket Numeric) nije
postojao. Medjutim, izvrsava se znacajno brze od programa mandelbrot.py.

To je zbog toga sto mandelbrotwx.py koristi threads (import threading).

2014/2015 GB

11 / 16

Multithreading

Compiliranjem bilo kog racunalnog programa dobiva se njegova izvrsna verzija. Proces je instanca izvrsnog
programa koja se izvrsava na racunalu.

Multithreading (visedretvenost, visenitnost) je mogucnost istovremenog izvrsavanja nekoliko zadataka (task)


u istom programu. Proces se moze podijeliti na nekoliko dretvi (threads, niti) koje se izvrsavaju
istovremeno. Dretve u jednom procesu dijele zajednicku memoriju i tako medjusobno komuniciraju.

Primjer multithreadinga je Web preglednik: moze istovremeno komunicirati na mrezi i prikazivati sadrzaj na
zaslonu. Ili npr. word processor gdje istovremeno snimamo sadrzaj na disk, printamo i unosimo tekst.
Visedretveni programi su efikasniji, ali nije lako pisati ih.

2014/2015 GB

12 / 16

Multiple threads on multiple CPU

U viseprocesorskim sustavima dretve se izvrsavaju simultano na vise procesora.


2014/2015 GB

13 / 16

Multiple threads on single CPU

U sustavima s jednim procesorom dretve dijele CPU vrijeme i operacijski sustav je odgovoran za raspodjelu
resursa. To je prakticno zbog toga sto je CPU u programima s jednom dretvom najveci dio vremena
besposlen.

Mogucnost stvaranja dretvi je osobina operacijskog sustava.

2014/2015 GB

14 / 16

Sinhronizacija dretvi i deadlocks

Zamislite nekoliko dretvi koje istovremeno mijenjaju stanje bankovnog racuna. Data-corruption problemi
mogu nastati ako vise dretvi istovremeno pristupa istim podacima.

Ako vise dretvi pristupa zajednickom resursu na nacin koji vodi do konflikta kaze se da je to race condition.

race condition se izbjegava tako sto se zabrani da vise dretvi istovremeno pristupa nekom dijelu programa
gdje mogu nastati problemi (tzv. critical region).

Nekad se u programima javljaju situacije kad vise dretvi dobiva kljuc za nekoliko zajednickih objekata. To
moze izazvati deadlock (zaglavljivanje) tj. situaciju kad svaka dretva ima kljuc za jedan od objekata i ceka
na kljuc za druge objekte.

Deadlock se izbjegava uporabom tzv. resource ordering-a. Tu se uspostavlja red po kome se daju kljucevi
objekata i osigurava se da svaka dretva dobiva kljuc po tom redu.

2014/2015 GB

15 / 16

Program s dretvom

Vrlo jednostavni primjer programa s dretvom (bez wxPythona) je:


import threading
import datetime

1
2
3

class ThreadClass ( threading . Thread ) :


def run ( self ) :
now = datetime . datetime . now ()
print " % s says Hello World at time : % s " %( self . getName () , now )

4
5
6
7
8

for i in range (2) :


t = ThreadClass ()
t . start ()

9
10
11

Rezultat:

2014/2015 GB

16 / 16

You might also like