To jest stara wersja strony!


Prolog, graficzny interfejs użytkownika XPCE

XPCE jest zorientowanym obiektowo podsystemem wizualizacji dla środowiska SWI-Prolog. Pełna dokumentacja XPCE znajduje się pod adresem: http://hcs.science.uva.nl/projects/xpce/UserGuide/

Wprowadzenie

Tworzenie obiektów

new/2 (new(?Reference, +NewTerm)) umożliwia tworzenie obiektów graficznych, pierwszy argument zwraca referencje do utworzonego obieku (unikalny identyfikator) z użyciem @/1, drugi argument jest rodzajem obiektu (klasą) do utworzenia.

?- new(P, point(10,20)).
P = @772024
 
?- new(@demo, dialog('Demo Window')).

free/1 (free(+Reference)) niszczy obiekty, argumentem jest identyfikator obiektu (pierwszy argument new/2).

?- free(@demo).

Uwaga: Wszystkie obiekty utworzone z wykorzysaniem named reference (@demo w powyższym przykładzie) muszą być usunięte za pomocą free/2 w celu uniknięcia wycieków pamięci.

Modyfikacja stanu obiektów

Stan obiektu można zmodyfikować korzystając z predykatu: send/2. Pierwszym argumentem jest referencja obiektu, drugim metoda do wykonania. Poniższy przykład dodaje pole tekstowe do utworzonego wcześniej okna dialogowego.

?- send(@demo, append(text_item(nazwa))).

Aby wyświetlic tak utworzony obiekt należy użyc metody open:

?- send(@demo, open).

send można również dekomponując term, zatem powyższy przykład można zapisać jako:

?- send(@demo, append, text_item(nazwa)).

zatem kolejne argumenty send licząc od 3-go będą argumentami metody append.

XPCE definiuje kilka standardowych obiektów m.in. @display oraz @prolog. @display reprezentuje ekran. @prolog jest obiektem reprezentującym maszynę wnioskującą. Dowolny predykat zdefiniowany w Prologu jest metodą, w nomenkleaturze XPCE. Zatem za pomocą send można uruchomic np. write/1:

?- send(@prolog, write('hello')).

Odpytywanie obiektów

get/3 (get(+Receiver, +Selector(+Argument…), -Result)) umożliwia uzyskanie informacji o stanie obiektu. Np. aby dowiedzieć się jaka jest szerokość obiektu:

?- get(@demo,width,X)

albo o wartości wpisanej do pola tekstowego (metoda member wyszuka wlaściwy obiekt, po nazwie, jaka była uzyta do jego utworzenia w tym przypadku nazwa):

?- get(@demo, member(nazwa), ObiektTekstowy), get(ObiektTekstowy, selection, ToCoUzytkownikWpisal).

Biorąc pod uwagę poniższy program:

:- new(@demo, dialog('Okno Testowe')),
   new(@txt,text_item('to Jest tekst:')),
   send(@demo,append(@txt)),
   send(@demo,open).

Zapytanie:

?- get(@txt,selection,X).

uzgodni z szukaną X wartość wprowadzoną przez użytkownika.

Poniższe zapytanie uzgodni szerokość ekranu z szukaną X:

?- get(@display,width,X).

Akcje

Aby zaprogramować zdarzenie związane z akcją użytkownika nalezy skorzystać z uśpionego send.

Poniższy kod utworzy okno o nazwie 'dialogowe' oraz przycisk 'nacisnij'. Po nacisnięciu przycisku na standardowym wyjściu pojawi się napiś 'au! nie naciskaj'.

?- new(@okno,dialog(dialogowe)),
   new(@but,button(nacisnij,message(@prolog,write,'au! nie naciskaj!\n'))),
   send(@okno,append,@but),
   send(@okno,open).

albo w krótszej wersji:

?- new(@okno,dialog(dialogowe)),
   send(@okno,append(button(nacisnij,message(@prolog,write,'au! nie naciskaj!\n')))),
   send(@okno,open).

Selektor

wypisz(X):-
  new(Okno,dialog(wpisales)),
  send(Okno,append(text(X))),
  send(Okno,open).
 
ui:-
  new(Okno,dialog(dialogowe)),
  send(Okno,append(new(Txt,text_item(pole_tekstowe)))),
  send(Okno,append(button(nacisnij,message(@prolog,wypisz,Txt?selection)))),
  send(Okno,open).
 
:- ui.

W 9 lini występuje tzw. selektor. Pozwala on na wybranie określonej własności obiektu, która ma być przekazana. W tym przypadku jest to wartość selection pola tekstowego (szukana Txt), czyli tekst wpisany w pole przez użytkownika.

pl/prolog/prolog_lab/prolog_lab_xpce.1208643187.txt.gz · ostatnio zmienione: 2019/06/27 15:59 (edycja zewnętrzna)
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0