Upload
nguyendung
View
240
Download
0
Embed Size (px)
Citation preview
LATEX vizualizacijaPhonruleTipaQb4eTikZ
Python vizualizacijaTkInter - opcenitoTkinter objektiPrimjeri
Vježba 4 — Vizualizacija I (LATEX + TkInter)
4.1 LATEX vizualizacija
4.1.1 Phonrule
Ovaj paket sadrži funkcije s kojima se po fonetskim pravilima ispisuju glasovni uzorci (nažalostsamo za engleski jezik).Naredba \phon ima opci oblik s dva argumenta:
\phon{input} {output}prvi je ulaz pravila ({input}), a drugi je izlaz ({output}), dok:
\phonc{input} {output} {context}ima dodatni argument ({context})
Naredbe \phonl, \phonr i \phonb u kojima se kontekst stavlja uz oznacitelj mjesta s lijeve,desne ili s obje strane.
Naredba \oneof pruža mogucnost kompilacije više konteksta, svakog u svom retku, omede-nih viticastim zagradama. Slijedi nekoliko primjera:
1 \usepackage{phonrule}2 \phon{z}{r}3 \phonc{a}{e}{[-stressed]}4 \phonl{k}{c}{i}5 \phonr{t}{ts}{u}6 \phonb{s}{z}{V}{V}
Sljedeci LATEXprogramski odlomak:
1 \usepackage{phonrule}2 \phonc{x}{y}{\oneof[l]{3 \phold z \\4 \phonfeat{5 +feature x \\6 -feature y7 }8 \phold9 }
daje na zaslonu sljedece:
46 Vizualizacija I (LATEX + TkInter)
Na koncu, naredba \phonfeat omogucuje umetanje fonetskih obilježja. Moguci parametri su:c za središte (eng. centre),l za lijevo poravnanje,r za desno poravnanje.
Kombinacijom nekih od dosadašnjih naredbi ovog paketa realizira se programski odsjecak:
Program 4.1 — Phonrule. –
1 \usepackage{phonrule}2
3 \phonb{\phonfeat{+stop \\ +consonant \\ +alveolar} }{[A]}{\phonfeat{+vowel\\ +stressed} }{\phonfeat{+vowel \\ +stressed} }
koji daje sljedeci ispis na zaslonu:
Identificirajte svaki clan izlaza preko zadanog ulaza.
4.1.2 TipaTIPA je sustav za obradbu IPA (International Phonetic Alphabeet) simbola u LATEX-u.
Postoji popis simbola koji se mogu stvoriti i nacin (naredbe) da se to dogodi. Neke naredbeimaju opcenitiji znacaj od dobivanja samo jednog simbola. Na primjer kôd \* se može koristitina više nacina od kojih su neka pokazana na sjedecoj slici:
Sljedeci program koristi slicne naredbe: \;, \: i \!.
Program 4.2 — TIPA LATEX modul. –
1 \usepackage{tipa}2 \textipa{abcdefghijklmnopqrstuvwxyz}3 \textipa{ABCDEFGHIJKLMNOPQRSTUVWXYZ}4 \textipa{\;A \;B \;E \;G \;H \;I \;L \;R \;Y}5 \textipa{\:d \:l \:n \:r \:s \:t \:z}6 \textipa{\!b \!d \!g \!j \!G \!o}
4.1 LATEX vizualizacija 47
Postoje tablice svih simbola koji se uopce mogu naci u fonologijskim zapisima prirodnihjezika svijeta. Jednu od tih tablica prikazuje slika:
Važno je istaknuti da je moguce uci u tzv. "IPA environment" (IPA okoliš), kako se ne bipisale duge. vec jednostavne naredbe, na primjer ovako:
4.1.3 Qb4eOvo je tipicni LATEXprogramski paket za jezikoslovlje - služi za oznacivanje vrsta recenica(primjera, definicija i/ili glosa) s obzirom na njihovu lingvisticku ispravnost. Ako je recenicapogrešna, ispisuje se tocka (’*’), ako je sumnjiva onda dva usklicnika, a sve recenice se najcešcenumeriraju. Postoji i gniježdenje oznaka.
Sljedecim programom pokazuju se osnovne naredbe paketa:
48 Vizualizacija I (LATEX + TkInter)
Program 4.3 — Qb4e - nabrajanje naredbi . –
1 \usepackage{qb4e}2 \begin{exe} % sets up the top-level example environment3 \ex\label{here} Broj je jedan. % example with running number4 \ex[*]{Jedan ovdje jo² (broji).} % judged ex. with running number5 \ex Evo nekih s prosudbama.6 \begin{xlist} % first embedding (alphabetical numbering)7 \ex[]{Gramati£ki ispravna re£enica: Tko sam ja?}8 \ex[*]{Gramati£ki neispravna re£enica: Sam tko ja?}9 \ex[??]{Sumnjiva re£enica: Ja sam tko.}
10 \ex % just the number11 \begin{xlist} % second embedding (roman numbering)12 \ex[**]{Treba li jo² jedna uvlaka?}13 \ex[\%]{Ponekad.}14 \end{xlist} % end second embedding15 \ex Usudi se suditi mi!16 \end{xlist} % end first embedding17 \ex Ovim se zaklju£uje na²a demonstracija.18 \end{exe} % end example environment
što daje sljedeci ispis na zaslonu:
Obrazložite svaki pojedinacni redak ispisa.
U iducem programskom primjeru pokazuje se cesta upotreba paketa u višejezicnoj usporedbii poveznicama rijeci.
Program 4.4 — Gb4e LATEX modul s poveznicama rijeci. –
1 \usepackage{gb4e}2
3 \begin{exe}4 \ex5 \gll Wenn jemand in die W\"uste zieht ... \\6 If someone in the desert draws and lives ... \\7 \trans `if one retreats to the desert and ... '8 \trans `ako se netko povrati u pustinju i ... '9 \end{exe}
4.1 LATEX vizualizacija 49
10
11 \begin{exe}12 \ex13 \gll Den Fritz_1 habe ich \_\_{}_1 zum Essen eingeladen.\\14 the fred have I {} {to the} eating invited.\\15 \glt I invited Fred for dinner.16
17 \ex18 \gll * Dit is een voorboeldje.\\19 {} This is an example.\\20 \trans `Here's where the translation would be'21
22 \ex[*]{23 \gll Dit is een voorboeld.\\24 This is an example.\\25 \trans `and this would be the translation line'}26 \end{exe}27
28 \begin{exe}29 \ex\atcenter{30 \arrowalign{\fillright\pd&\link3&\fillleft{\vrule\hfil}\cr31 Did&\ &John&\ &t_{gr}&\ appear &t&\ to be likely32 &t&\ to win.\cr33 &&\fillright\pu&\link3&\centr{\vrule\spacer\pu}&\lf34 &\fillleft\vrule\cr}35 }36 \end{exe}
što daje sljedeci ispis na zaslonu:
Uocite poravnavanje rijeci u prijevodima i brazložite svaki pojedinacni ispis.
50 Vizualizacija I (LATEX + TkInter)
4.1.4 TikZTikZ je najbolji graficki program u LATEX-u. U ovom potpoglavlju iskoristit ce se samo njegovemogucnosti za crtanje sintaktickijh stabala. Za istu tu svrhu služi i paket qtree, ali kako su obavrlo slicna i jednostavna, koristit cemo samo podmodul paketa TikZ s imenom ’TikZ-qtree’:
Program 4.5 — Tikz LATEX modul. –
1 \usepackage{tikz}2 \usepackage{tikz-qtree}3
4 \begin{tikzpicture}5 \Tree [.S [.NP [.Det Jedna ] [.N ma£ka ] ]6 [.VP [.V sjedi ]7 [.PP [.P na ]8 [.NP [.Det jednoj ] [.N prostirki ] ] ] ] ]9 \end{tikzpicture}
10
11 \begin{tikzpicture}12 \tikzset{grow'=right} % rast stabla s lijeva nadesno13 \tikzset{every tree node/.style={anchor=base west}} % postaviti £vorove
stabla na lijevo (zapad)14 \Tree [.S [.NP LaTeX ] [.VP [.V je ] [.NP zabavan ] ] ]15 \end{tikzpicture}
što daje sljedeci ispis na zaslonu:
Obrazložite svaki pojedinacni redak ispisa.
U istom modulu moguce je crtati i ovisnosna stabla, i to u razlicitim varijantama. Za primjer,uzima se samo jedna od njih:
4.1 LATEX vizualizacija 51
Program 4.6 — Tikz (dependency) LATEX modul. –
1 \usepackage{tikz}2 \usepackage{tikz-qtree}3 \begin{dependency}[theme = simple]4 \begin{deptext}[column sep=1em]5 A \& hearing \& is \& scheduled \& on \& the \& issue \& today \& . \\6 \end{deptext}7 \deproot{3}{ROOT}8 \depedge{2}{1}{ATT}9 \depedge[edge start x offset=-6pt]{2}{5}{ATT}
10 \depedge{3}{2}{SBJ}11 \depedge{3}{9}{PU}12 \depedge{3}{4}{VC}13 \depedge{4}{8}{TMP}14 \depedge{5}{7}{PC}15 \depedge[arc angle=50]{7}{6}{ATT}16 \end{dependency}
daje sljedeci ispis na zaslonu:
52 Vizualizacija I (LATEX + TkInter)
4.2 Python vizualizacija
4.2.1 TkInter - opcenito
TkInter ima standardnu GUI knjižnicu za Python. Stvaranje GUI aplikacije je jednostavna zadaca,koja se izvodi u par koraka:
1. ucitati Tkinter modul2. naciniti glavni prozor za GUI aplikaciju3. dodati jedan ili više grafickih modula, tzv widgets-a u glavni prozor4. naciniti glavnu petlju koja reagira na sve korisnikove akcije (preko miša ili tipkovnice)
Program 4.7 Osnovni Tkinter program
1 import Tkinter2 top = Tkinter.Tk()3 # Ovdje se dodaje kod widgets-a...4 top.mainloop()
To ce na zaslonu racunala otvoriti prazan okvir:
Slika 4.1: Tkinter prozor
Tkinter nudi razlicite upravljacke module, kao što su gumbovi (eng. buttons), oznake (eng.labels), tekstne okvire (eng. text boxes) i slicno, koje zovemo widgets-ima. Do sad je razvijeno15 tipova widgets-a u Tkinter-u, koji su ukratko opisani u sljedecoj tablici:
Svi Tkinter wingets-i imaju pristup specificnim geometrijskim metodama, s kojima seorganiziraju widgets-i s obzirom na prvotno (roditeljsko) spremište. Postoje 3 metode koje semogu koristiti:
1. Pack metoda - ovo geometrijsko upravljanje organizira widgets-e u blokove prije nego ihstavi u roditeljski widget
2. Grid metoda - ovo geometrijsko upravljanje organizira widgets-e u strukturi slicnoj tabliciu roditeljskom widget-u
3. Mjesna (eng. place) metoda - ovo geometrijsko upravljanje postavlja widgets-e na speci-ficnu poziciju u roditeljski widget
Svaka opisana metoda ima jedan ili više atributa i bilo bi prezahtjevno (i nepotrebno) opisivatisvakog pojedinacno. Zato je u sljedecoj tablici nacinjen pokušaj da se osnovni atributi ujedine, sobzirom na kategorije koje ih ujedinjuju. Svaki argument po imenu, vec govori o svojoj ulozi.Detalje treba potražiti u Tkinter prirucniku.
4.2 Python vizualizacija 53
Ime widgets-a Namjena
Button prikazuje gumb koji se spaja s nekom akcijomCanvas prostor za crtanje grafickih oblikaCheckbutton služi za prikaz više opcija izmedju kojih korisnik može izabrati jednu ili višeEntry prikazuje ’kucicu’ - obrazac za unos korisnickog tekstaFrame okvir (eng. container) za prihvat drugih widgets-aLabel tekstni opis ili slika u jednom retku za opis drugih widgets-aListbox lista korisnickih ponudaMenubutton služi za prikaz izbornih ponuda u aplikacijiMenu izborne ponude s razlicitim naredbama koje su sadržane unutar Menu gumba.Message ispis višelinijskih poruka korisnikuRadiobutton koristi se za prikaz više opcija od kojih korisnik može izabrati samo jednuScale upravlja analognom vrpcom (eng. slider-om)Scrollbar upravlja vertikalnim pomakom (eng. scroll), npr. kod listaText ispis teksta u više linijaToplevel služi za vizualno odvajanje više spremištaSpinbox jedna varijanta Entry-a, kojom se izabire izmedu fiksnog broja vrijednostiPanedWindow spremište koje može imati bilo koji broj hor. ili vert. podspremištaLabelFrame jednostavno spremište unutar složenihtkMessageBox služi za ispis poruke u aplikaciji
Tablica 4.1: Funkcije u Tkinter paketu
Atributi se navode na standardan nacin, u obliku parova ’atribut=vrijednost’, na primjer: text="plus", relief=RAISED, cursor="plus" i slicno.
Kategorija Atributi
Dimensions borderwidth, highlightthickness, padX, padY, height, width, . . .Colors background, foreground, highlightcolor,. . .Fonts family, size, weight, slant, underlineAnchors NW, N, NE, W, CENTER, E, SW, S, SERelief styles FLAT, RAISED, SUNKEN, GROOVE, RIDGEBitmaps "error", "gray75", "hourglass", "info", "question", "warning", . . .Cursors "arrow", "circle", "clock", "cross", "dotbox", . . .
Tablica 4.2: Standardni atributi Tkinter funkcija
4.2.2 Tkinter objekti
Ne ulazeci u detalje, u nastavku ce bit pokazano nekoliko Tkinter funkcija i pripadnh kratkihprogramskih odsjecaka s kojima se one lako razumiju.
Frame widget je vrlo važan za proces povezivanja i organiziranja drugih widgets-a na laknacin. On radi kao spremište (eng. container) i prima na sebe druge widgets-e.
Njegova sintaksa je:w = Frame (glavni, opcije, ... )
gdje argument glavni, odgovara roditeljskom widgets-u, a opcije nekom od parametara dimenzija,boje i slicno.
54 Vizualizacija I (LATEX + TkInter)
Program 4.8 Tkinter program koji opisuje Frame funkciju
1 from Tkinter import *2
3 root = Tk()4 frame = Frame(root)5 frame.pack()6
7 bottomframe = Frame(root)8 bottomframe.pack( side = BOTTOM )9
10 redbutton = Button(frame, text="Red", fg="red")11 redbutton.pack( side = LEFT)12
13 greenbutton = Button(frame, text="Brown", fg="brown")14 greenbutton.pack( side = LEFT )15
16 bluebutton = Button(frame, text="Blue", fg="blue")17 bluebutton.pack( side = LEFT )18
19 blackbutton = Button(bottomframe, text="Black", fg="black")20 blackbutton.pack( side = BOTTOM)21
22 root.mainloop()
Primjetite stvaranja Button (gumb) objekta i njegovo pozicioniranje na Frame spremište.Takoder je vidljiva ’pack’ metoda kojom se svi gumbi uglavljuju u okvir. Izvodjenjem programadobit cemo sljedeci prozor s obojenim gumbima u definiranom nizu:
Slika 4.2: Tkinter prozor
U iducem programu pokazuje se tkMessageBox objekt koji ima showinfo metodu za prikazporuke. Objekt je korišten u hello() korisnickoj funkciji koja se poziva iz Button objekta.
Program 4.9 Tkinter program koji opisuje tkMessageBox funkciju
1 import Tkinter2 import tkMessageBox3
4 top = Tkinter.Tk()5 def hello():6 tkMessageBox.showinfo("Say Hello", "Hello World")7
8 B1 = Tkinter.Button(top, text = "Say Hello", command = hello)9 B1.pack()
10
11 top.mainloop()
4.2 Python vizualizacija 55
Posebno važno je vidjeti povezivanje nekog Tkinter objekta (u ovom slucaju Button-a) snekom korisnickom funkcijom. Za to nam služi atribut command, pa u našem slucaju com-mand=hello cini da se klikom na gumb izvrši funkcija hello(), kako je prikazano slikom:
Slika 4.3: Izvodjenje korisnicke funkcije unutar Tkinter objekta
4.2.3 PrimjeriU nastavku su pokazana tri primjera, za druge Tkinter objekte. Oni ne donose novu informaciju,nego proširuju i potvrdduju postojecu.
U prvom primjeru ukljucen je Radiobutton objekt, koji omogucuje korisniku jedan izborizmedju više mogucnosti. Osluškivanje dogadaja lijevog klika miša od strane korisnika, obavljase u objektu bez potrebe pisanja dodatnih funkcija, što olakšava upotrebu.
Program 4.10 Tkinter program koji opisuje Radiobutton funkciju
1 from Tkinter import *2
3 def sel():4 selection = "You selected the option " + str(var.get())5 label.config(text = selection)6
7 root = Tk()8 var = IntVar()9 R1 = Radiobutton(root, text="Option 1", variable=var, value=1,
10 command=sel)11 R1.pack( anchor = W )12
13 R2 = Radiobutton(root, text="Option 2", variable=var, value=2,14 command=sel)15 R2.pack( anchor = W )16
17 R3 = Radiobutton(root, text="Option 3", variable=var, value=3,18 command=sel)19 R3.pack( anchor = W)20
21 label = Label(root)22 label.pack()23 root.mainloop()
Primjetite upotrebu cjelobrojne varijable kojom se odabrana mogucnost pridružuje broju, s
56 Vizualizacija I (LATEX + TkInter)
kojim se onda lako izvode grananja (ako→ onda) u programu.Rezultat pokretanja programa bit ce:
Slika 4.4: Radiobutton
Na slican nacin moguce je ugraditi složene izborne ponude (menu-e) u vizualno suceljekorisnickog programa:
Program 4.11 Tkinter program koji opisuje Menu funkciju
1 from Tkinter import *2 def donothing():3 filewin = Toplevel(root)4 button = Button(filewin, text="Do nothing button")5 button.pack()6
7 root = Tk()8 menubar = Menu(root)9 filemenu = Menu(menubar, tearoff=0)
10 filemenu.add_command(label="New", command=donothing)11 filemenu.add_command(label="Open", command=donothing)12 filemenu.add_command(label="Save", command=donothing)13 filemenu.add_command(label="Save as...", command=donothing)14 filemenu.add_command(label="Close", command=donothing)15
16 filemenu.add_separator()17
18 filemenu.add_command(label="Exit", command=root.quit)19 menubar.add_cascade(label="File", menu=filemenu)20 editmenu = Menu(menubar, tearoff=0)21 editmenu.add_command(label="Undo", command=donothing)22
23 editmenu.add_separator()24
25 editmenu.add_command(label="Cut", command=donothing)26 editmenu.add_command(label="Copy", command=donothing)27 editmenu.add_command(label="Paste", command=donothing)28 editmenu.add_command(label="Delete", command=donothing)29 editmenu.add_command(label="Select All", command=donothing)30
31 menubar.add_cascade(label="Edit", menu=editmenu)32 helpmenu = Menu(menubar, tearoff=0)33 helpmenu.add_command(label="Help Index", command=donothing)34 helpmenu.add_command(label="About...", command=donothing)35 menubar.add_cascade(label="Help", menu=helpmenu)36
37 root.config(menu=menubar)
4.2 Python vizualizacija 57
38 root.mainloop()
U ovom slucaju izvodi se bezlicna korisnicka funkcija (donothing)koja daje samo gumb nakojim se pritiskom ne dogada ništa. Dakako, svakoj mogucoj izbornoj ponudi u uobicajenomradu se pridružuje adekvatna funkcija, koja željeno izvodi.
Primjer grafickog sucelja gornjeg programskog odsjecka bio bi:
Slika 4.5: Tkinter menu