Rozdział 29.
Podstawy języków Tcl i Tk
Tim Parker
W tym rozdziale:
Czym jest Tcl?
Czym jest Tk?
Język Tcl
Tk - nowe możliwości Tcl
Czym jest Tcl?
Tcl (nazwa ta czyta się „tikl”, a pochodzi od angielskiej nazwy Tool Command Language) jest językiem przeznaczonym do pisania skryptów, podobnym nieco do języków interpreterów poleceń powłoki, omówionych w rozdziale 14. Używa się go głównie do szybkiego tworzenia programów działających w trybie tekstowym.
Język Tcl został zaprojektowany przez Johna Ousterhouta, późniejszego pracownika Uniwersytetu Kalifornijskiego w Berkeley. Jest on językiem interpretowanym, posiada więc typowe wady i zalety tego rodzaju języków. Największą wadą języków interpretowanych jest niewielka szybkość działania: program napisany w języku kompilowanym może działać wielokrotnie szybciej. Podstawową zaletą jest krótszy czas tworzenia aplikacji i możliwość natychmiastowego obejrzenia efektów wprowadzonych zmian, co wynika z braku etapu kompilacji programu.
Podstawowe możliwości funkcjonalne języka Tcl realizowane są za pomocą bazowego zestawu funkcji wewnętrznych, jednak jego prawdziwa potęga tkwi w nieograniczonych wręcz możliwościach rozbudowy. Programista może bez trudu tworzyć własne biblioteki, co więcej - może osadzać biblioteki Tcl we własnych programach. Dzięki temu możliwe jest wbudowanie do tworzonej aplikacji elementów języka skryptowego bez konieczności projektowania takiego języka od podstaw. W konsekwencji użytkownicy aplikacji uzyskują dostęp zarówno do wszystkich wewnętrznych poleceń Tcl, jak i do funkcji utworzonych przez programistę i umieszczonych w bibliotece języka.
Polecenia języka Tcl mogą być wywoływane po uruchomieniu jego interpretera. W większości systemów nazywa się on tclsh (w niektórych nosi nazwę tcl). Po uruchomieniu interpretera można już bezpośrednio wpisywać polecenia, na przykład:
puts stdout "Ahoj, przygodo!"
Polecenie to składa się z trzech elementów. Właściwe polecenie to puts; nazwa ta jest skrótem od angielskiego „put string”, zaś samo polecenie zapisuje dane do urządzenia określonego przez drugi element. W naszym przypadku urządzeniem tym jest standardowe urządzenie wyjściowe, czyli na ogół ekran monitora. Trzecim elementem polecenia jest wyprowadzany tekst. Cudzysłowy zapewniają, że zostanie on zinterpretowany jako pojedynczy wyraz.
|
stdout (standardowe urządzenie wyjścia) jest domyślnym urządzeniem wyjściowym dla polecenia puts, jeśli więc chcesz wydrukować coś na ekranie, drugi argument może zostać pominięty. |
Nawet na tak nieskomplikowanym przykładzie widać, jaką postać ma składnia prostych poleceń języka Tcl (poleceń jest oczywiście znacznie więcej, jednak składnia pozostaje we wszystkich przypadkach identyczna):
polecenie parametr1 parametr2 ...
polecenie może być dowolną funkcją wewnętrzną języka Tcl bądź też wywołaniem zdefiniowanej przez programistę procedury rozszerzającej zestaw poleceń wbudowanych. W obu przypadkach obowiązująca składnia pozostaje taka sama.
Czym jest Tk?
Tk, również opracowany przez Johna Ousterhouta, jest rozszerzeniem języka Tcl o interfejs graficzny (oparty na systemie X Window). Pozwala on na tworzenie programów dla X Window w sposób znacznie łatwiejszy, niż przy użyciu konkurencyjnych bibliotek X, takich jak Motif czy Open Look. Pod wieloma względami przypomina on rodzinę języków Visual dla Windows (np. Visual Basic).
Podobnie jak Tcl, Tk również pozwala na wpisywanie poleceń, które następnie są interpretowane. Interpreter Tk jest nadzbiorem Tcl, toteż każdy program napisany w Tcl będzie działał w języku Tk. Tk obsługuje jednak wiele nowych funkcji, pozwalających łatwo i szybko dodać do programu interfejs X.
Interpreter poleceń Tk nazywa się wish (ang. windowing shell) i musi być uruchamiany w środowisku X (po uruchomieniu wyświetla on okno prezentujące wyniki wykonania interpretowanych poleceń trybu graficznego).
Po tym krótkim wprowadzeniu spróbujmy przepisać poprzedni program przykładowy tak, aby napis Ahoj, przygodo pojawił się na przycisku wyświetlanym w oknie interpretera wish. W tym celu należy najpierw uruchomić ten ostatni, czego dokonuje się poprzez wpisanie w oknie Xterm polecenia:
wish
Spowoduje to wyświetlenie okna wish i uruchomienie interpretera Tk w oknie Xterm. Polecenia języka Tcl (lub Tk) wpisuje się bezpośrednio w oknie Xterm. Aby wyświetlić w oknie wish nasz przycisk z napisem, musimy wprowadzić następujące polecenia:
button .b -text "Ahoj, przygodo!" -command exit
pack .b
Jak widać, składnia jest taka sama jak poprzednio: po właściwym poleceniu następuje pewna liczba argumentów. Pierwszy z nich to nazwa, którą zamierzamy przypisać przyciskowi. Postać następnych argumentów różni się od użytych w Tcl-owej wersji programu -składają się one z dwóch części: nazwy argumentu i jego wartości.
Drugi argument nazywa się text, a jego wartością jest tekst, który ma pojawić się na przycisku. Trzeci argument, o nazwie command, zawiera nazwę polecenia, które ma zostać wykonane po naciśnięciu przycisku. W naszym przypadku program nie powinien nic zrobić, toteż nakazujemy interpreterowi zakończenie przetwarzania skryptu.
Przycisk, który utworzyliśmy, nazywa się .b. Do jego wyświetlenia w oknie wish służy polecenie pack.
W naszym przykładzie polecenie to posiada tylko jeden argument: nazwę przycisku utworzonego w pierwszym wierszu programu. Wynikiem jego wykonania będzie więc wyświetlenie w oknie wish przycisku zawierającego napis Ahoj, przygodo.
W powyższym przykładzie warte omówienia są jeszcze dwie rzeczy. Po pierwsze, wyjaśnijmy, dlaczego nasz przycisk nosi nazwę .b, a nie np. b czy przycisk.. Sama nazwa jest tu mało istotna (można by oczywiście użyć nazwy przycisk), ważna jest natomiast rozpoczynająca ją kropka. Symbol kropki służy tu do reprezentowania hierarchii elementów sterujących (ang. widget). Każdy z nich zawarty jest w innym elemencie. Główny, nadrzędny element hierarchii zawarty jest bezpośrednio w oknie wish, a jego nazwą jest . (kropka; można tu zauważyć pewną analogię z linuxowym systemem plików, w którym poszczególne katalogi są wzajemnie zagnieżdżone, zaś katalog główny (najwyższego poziomu) nosi nazwę /). Za każdym razem, gdy tworzony jest nowy element, musimy poinformować interpreter Tk, w którym elemencie hierarchii będzie on zawarty. W naszym przypadku „pojemnikiem” na nowo tworzony przycisk jest element ., czyli główny element hierarchii.
Po drugie, zauważ, że po wykonaniu polecenia pack okno wish zmienia rozmiar, kurcząc się do rozmiarów utworzonego przycisku. Do zmiany tego zachowania i modyfikacji sposobu wyświetlania obiektów na ekranie służą liczne polecenia języka, którymi zajmiemy się nieco później.
Język Tcl
Po prezentacji przykładów wróćmy do podstaw i przyjrzyjmy się bliżej językowi Tcl. Zawiera on wiele poleceń, które pozwalają na tworzenie wszystkich konstrukcji spotykanych w innych językach programowania. Polecenia te zostaną omówione poniżej.
Zmienne i przypisywanie wartości
Podobnie jak interpretery poleceń powłoki UNIX-a, Tcl pozwala na korzystanie ze zmiennych, będących tymczasowymi pojemnikami na dane przetwarzane w programie. Nazwy zmiennych w języku Tcl składać się mogą z dowolnych znaków drukowalnych i na ogół związane są w jakiś sposób z przechowywaną w zmiennych informacją. Poprawnymi nazwami zmiennej przechowującej miesięczne zarobki pracownika są na przykład:
Miesieczne_zarobki
"Miesieczne zarobki"
|
Użycie cudzysłowu powoduje, że Tcl traktuje spacje i znaki tabulacji (czyli tzw. białe znaki) nie jako znaki rozdzielające wyrazy, tylko jako część nazwy. Dokładniejsze omówienie tego tematu znajdziesz w punkcie „Użycie cudzysłowów”. |
Również wartość zmiennej może składać się z dowolnych znaków, na przykład:
"15,000"
15000
"patrz tabela 4"
Do przypisywania wartości do zmiennych służy w języku Tcl polecenie set. Może ono posiadać jeden lub dwa argumenty. W formie dwuargumentowej pierwszym argumentem jest nazwa zmiennej, zaś drugim - przypisywana do niej wartość. W przypadku użycia tylko jednego argumentu, jest on interpretowany jako nazwa zmiennej, której wartość zostanie zwrócona przez polecenie set. Poniższe polecenie powoduje przypisanie zmiennej Miesieczne_zarobki wartości 15000, a następnie wyświetlenie jej na ekranie:
set Miesieczne_zarobki 15000
Jeśli chcesz wyświetlić wartość zmiennej Miesieczne_zarobki, wpisz polecenie:
set Miesieczne_zarobki
Wszystkie zmienne (również numeryczne) przechowywane są jako łańcuchy znaków. Przykładowo, po przypisaniu:
set num 40
zmienna num będzie zawierała nie wartość liczbową, lecz ciąg znaków 40 (4 i 0).
Wiesz już, jak nadać zmiennej wartość i jak wyświetlić ją na ekranie. Aby wartości zmiennej użyć w poleceniu innym niż set, musisz jej nazwę poprzedzić znakiem $, nakazującym interpreterowi Tcl zwrócenie wartości następującej po nim zmiennej, np.:
set Miesieczne_zarobki 15000
expr $Miesieczne_zarobki*12
Pierwsze polecenie powoduje przypisanie zmiennej Miesieczne_zarobki wartości 15000. Polecenie expr służy do obliczania wartości wyrażeń - w naszym przypadku oblicza ono wartość zmiennej Miesieczne_zarobki pomnożoną przez 12.
Podstawienie polecenia
Podstawienie polecenia umożliwia użycie wyniku wykonania polecenia jako argumentu innego polecenia. Jest to możliwe dzięki otoczeniu nawiasami kwadratowymi polecenia, którego wartość ma zostać użyta w innym poleceniu, na przykład:
set Miesieczne_zarobki 15000
set Roczne_zarobki [ expr $Miesieczne_zarobki*12 ]
Pierwsze polecenie przypisuje zmiennej Miesieczne_zarobki wartość 15000. Drugie powoduje natomiast przypisanie zmiennej Roczne_zarobki wartości zwróconej przez polecenie expr zawarte w nawiasach kwadratowych (czyli wartości zmiennej Miesieczne_ zarobki pomnożonej przez 12).
W powyższym przykładzie w nawiasie kwadratowym występuje tylko jedno polecenie. Tcl pozwala jednak na umieszczenie tam dowolnego prawidłowego skryptu, czyli dowolnej liczby prawidłowych poleceń.
Użycie cudzysłowów
Zdarza się, że w programach trzeba użyć znaków mających specjalne znaczenie dla języka Tcl, ale nie chcesz, aby były one interpretowane. Możesz je ukryć przed interpreterem na trzy sposoby.
Pierwszy z nich to użycie podwójnego cudzysłowu (""). Zapobiega on interpretacji znaków białych. Kiedy chcesz, aby Tcl potraktował kilka wyrazów jako całość, powinieneś otoczyć je podwójnym cudzysłowem. Przykładem może być nazwa zmiennej składająca się z dwóch wyrazów: Miesieczne zarobki. Aby przypisać zmiennej o takiej nazwie wartość 1500, powinieneś wydać polecenie:
set "Miesieczne zarobki" 1500
Podwójne cudzysłowy przydają się również w przypadku, gdy chcesz przypisać zmiennej wartość składającą się z więcej niż jednego wyrazu, np.:
set Nagl1 "Zarobki w firmie"
Drugim sposobem ukrywania znaków przed interpreterem języka Tcl jest użycie symbolu lewego ukośnika (\). Powoduje on ukrycie jednego, następującego bezpośrednio po nim znaku. Najczęściej używa się go przed znakami takimi jak $, na przykład w taki sposób:
set Nagl1 "Miesięczne zarobki wynosiły średnio \$1200"
W powyższym przykładzie zmiennej Nagl1 zostanie przypisana wartość Miesięczne zarobki wynosiły średnio $1200. Dzięki zastosowaniu znaku \ interpreter języka Tcl nie próbuje wykonywać podstawienia zmiennej o nazwie $1200, co spowodowałoby błąd (ponieważ taka zmienna nie została zdefiniowana). Znak $ traktowany jest w tym przypadku tak jak każdy inny znak.
Trzeci sposób, najbardziej „skuteczny”, to użycie nawiasów klamrowych ({}). Zapobiegają one interpretacji wszystkich znaków specjalnych, w tym również znaków białych. Poniższe polecenie ma taki sam skutek jak polecenie podane w poprzednim przykładzie:
set Nagl1 {Miesięczne zarobki wynosiły średnio $1200}
Bardzo ważny jest fakt, że znaki specjalne występujące w argumentach poleceń nie są interpretowane od razu przez Tcl, ale dopiero po przesłaniu ich do odpowiedniego polecenia. Oto przykład takiej opóźnionej interpretacji:
set liczn 0
while {$liczn < 3} {
puts "Wartosc zmiennej liczn wynosi $liczn"
set liczn [ expr $liczn + 1]
}
W powyższym przykładzie instrukcja while musi przetworzyć oba argumenty w każdym przebiegu pętli. Z tego powodu konieczne jest, by interpreter zignorował wszystkie symbole specjalne występujące w tych argumentach, pozostawiając ich interpretację poleceniu while.
Zapoznaliśmy się już z podstawami języka Tcl, pora więc przyjrzeć się kilku nieco bardziej zaawansowanym poleceniom.
Instrukcja if
Instrukcja if działa tak, jak w innych językach programowania: powoduje wykonanie fragmentu kodu pod warunkiem, że jakieś wyrażenie jest prawdziwe. Jej składnia jest następująca:
if {wyrazenie} {polecenie}
Polecenie if wymaga podania dwóch argumentów. Pierwszy z nich to warunek, w zależności od którego wykonywane są polecenia podane jako drugi argument. Warunek jest zwykle wyrażeniem logicznym, przyjmującym wartości prawda lub fałsz, np.:
$i < 10
$num = 2
|
Tcl traktuje wszystkie wyrażenia o wartości zero jako fałszywe, zaś pozostałe - jako prawdziwe. Podobną sytuację mamy w takich językach programowania, jak C czy Perl, ale dokładnie odwrotnie jest na przykład w przypadku programu użytkowego test. Musisz niestety przyzwyczaić się do tej niedogodności. |
Wyrażenia takie jak:
$i + $b
10*3
mogą również zostać użyte jako warunek w instrukcji if, ale trudno znaleźć dla nich jakieś praktyczne zastosowanie.
Drugim argumentem polecenia if jest skrypt Tcl, mogący zawierać dowolną liczbę poleceń. Jest on wykonywany tylko wtedy, kiedy wartością pierwszego wyrażenia jest prawda.
Po poleceniu if może wystąpić jedna lub więcej instrukcja elseif i jedna instrukcja else; składnia tego polecenia jest wówczas następująca:
if {warunek} {
polecenia }
elseif {warunek} {
polecenia }
elseif {warunek} {
polecenia }
else {
polecenia }
Wykonane zostaną polecenia zawarte w nawiasach klamrowych po pierwszym warunku, który jest spełniony. Jeśli żaden warunek nie okaże się prawdziwy, wykonane zostaną polecenia występujące po słowie kluczowym else.
|
Nawias klamrowy musi zostać otwarty w tym samym wierszu, w którym znajduje się słowo go poprzedzające, ponieważ znak nowego wiersza traktowany jest jako separator poleceń. Jeśli pierwszą część polecenia if (if {warunek}) umieścisz w jednym wierszu, natomiast resztę polecenia (w nawiasach klamrowych) w wierszu następnym, obie części potraktowane zostaną jako dwa oddzielne polecenia. |
Instrukcja for
Polecenie for w języku Tcl służy do tworzenia pętli. Pętla for nie różni się zasadniczo od pętli tego rodzaju znanych z innych języków programowania, na przykład C. Instrukcja for wymaga podania czterech argumentów. Pierwszym z nich jest skrypt, służący zwykle do inicjalizowania licznika pętli. Drugi to wyrażenie, którego wartość jest obliczana przy każdym przebiegu pętli; na tej podstawie podejmowana jest decyzja, czy pętla ma być kontynuowana. Trzeci argument najczęściej używany jest do zwiększania wartości licznika pętli, czwarty zaś - to skrypt Tcl, który będzie wykonywany w każdym przebiegu pętli. Oto przykładowa pętla for:
for {set i 0 } {$i<10} {incr $i 1} {
puts [expr 2*$i]
}
Powyższa pętla wykonana zostanie 10 razy. Licznik i inicjalizowany jest wartością 0. Ciało pętli (polecenie puts wyświetlające wartość zmiennej i pomnożoną przez 2) wykonywane jest tak długo, jak długo wartość zmiennej i jest mniejsza od 10. Po każdym przebiegu pętli wartość zmiennej i zwiększana jest o 1. Po wykonaniu powyższego fragmentu programu na ekranie zostaną wyświetlone wartości:
0
2
4
6
8
10
12
14
16
18
Polecenie while
Polecenie while jest również poleceniem służącym do tworzenia pętli, bardzo podobnym do polecenia for. Jedyna ważna różnica polega na tym, że polecenie for pozwala na stosowanie bardziej wyszukanych warunków wejścia do i wyjścia z pętli. Składnię polecenia while pokażemy na przykładzie:
set i 0
while {$i < 10} {
puts [expr 2*$i]
set i [expr $i+1]
}
Działanie tego przykładu jest identyczne jak programu w poprzednim podrozdziale, opisującym pętlę for. Program oblicza wartość $i*2 w każdym przebiegu pętli i wyświetla ją na ekranie. Zauważ, że teraz o zwiększanie licznika zadbać trzeba w skrypcie, który jest wykonywany w pętli. W przypadku instrukcji for można było zrobić to podając odpowiednie polecenie jako trzeci parametr.
Polecenie switch
Polecenie switch zastępuje polecenie if w przypadku, gdy trzeba sprawdzić wiele warunków - wtedy po poleceniu if musiałaby wystąpić duża liczba poleceń elseif. Porównuje ono zadaną wartość (zwykle przechowywaną jako wartość zmiennej) z dowolną ilością wzorców; jeśli napotka wzorzec identyczny z wartością zmiennej - wykonuje powiązany z nią skrypt.
switch $rzecz {
auto {puts "Zmienna rzecz ma wartosc auto"}
rower {puts "Zmienna rzecz ma wartosc rower"}
pociag {puts "Zmienna rzecz ma wartosc pociag"}
default {puts "Nie rozpoznano wartosci zmiennej rzecz"}
}
Polecenie switch jest odpowiednikiem instrukcji case znanej z Pascala i niektórych innych języków programowania. Porównuje ono wartość przechowywaną w zmiennej rzecz (wartość tę należy oczywiście odpowiednio ustalić przed wywołaniem polecenia switch) z łańcuchem znaków auto. Jeśli obie wartości są równe, wypisany zostanie tekst Zmienna rzecz ma wartosc auto. W przeciwnym przypadku wartość zmiennej rzecz porównana zostanie z tekstem rower, jeśli porównanie wypadnie pomyślnie, wyświetlony zostanie tekst Zmienna rzecz ma wartosc rower, i tak dalej. Wartość default pozwala na zdefiniowanie akcji podejmowanej w przypadku, gdy żaden inny warunek nie jest prawdziwy. W naszym przykładzie jest to wyświetlenie tekstu Nie rozpoznano wartosci zmiennej rzecz.
|
Gdy chcesz sprawdzić, czy wartość zmiennej jest równa jednej z wielu wartości, zamiast if użyj instrukcji switch - powoduje to znaczne zwiększenie czytelności kodu. |
Komentarze
Dołączenie do kodu programu napisanego w języku Tcl (i w każdym innym języku programowania) komentarzy jest zawsze dobrym pomysłem. Komentarze stają się szczególnie potrzebne, gdy:
ktoś inny musi przeglądać napisany przez Ciebie program;
Twój program staje się duży;
nie będziesz przeglądał kodu przez dłuższy czas po jego napisaniu.
Komentarzy nie można wstawiać w środku poleceń - muszą one występować pomiędzy poleceniami. Do oznaczenia komentarza używa się symbolu #.
#To jest prawidlowy komentarz
set a 1 ; #To tez jest dobrze
set a 1 #To nie jest poprawny komentarz;
Trzeci wiersz powyższego programu nie jest poprawny, ponieważ komentarz zaczyna się w środku polecenia. Pamiętaj, że Tcl interpretuje tekst aż do znaku nowego wiersza lub średnika jako jedno polecenie.
Tk - nowe możliwości Tcl
Wcześniej w tym rozdziale przedstawiliśmy króciutki program napisany w języku Tk, wyświetlający przycisk z napisem „Ahoj, przygodo!”. Tk ma jednak o wiele większe możliwości. Poza przyciskami stworzyć można systemy menu, paski przewijania, rozwijane listy itp. W tym podrozdziale przyjrzymy się niektórym z elementów interfejsu graficznego, podamy również przykłady ich użycia.
Ramki
Ramki służą do przechowywania innych elementów. Nie mają, w przeciwieństwie do innych elementów sterujących, żadnych interesujących właściwości. Jedynymi widocznymi ich atrybutami są kolor tła i wygląd krawędzi. Krawędzie mogą być płaskie (flat - wartość domyślna), wypukłe (raised) i wklęsłe (sunken). Możesz poeksperymentować z tymi wartościami by przekonać się, jak poszczególne typy ramek prezentują się na ekranie.
Ramka płaska nie prezentuje się zbyt ciekawie. Wygląda dokładnie tak, jak domyślne okno wish (ponieważ domyślnie ramki są płaskie).
Przyciski
Przyciski służą do pobierania specyficznego typu informacji od użytkownika, który może je aktywować przez umieszczenie nad nimi kursora i wciśnięcie lewego przycisku myszy. Tk udostępnia trzy podstawowe typy przycisków:
przycisk polecenia (ang. button),
przycisk wyboru (ang. check button; przyciski tego typu mogą być załączone lub wyłączone),
przycisk opcji (ang. radio button; jest to grupa przycisków, z których tylko jeden może być załączony).
Przyciski polecenia używane są do rozpoczęcia jakichś działań (na przykład ładowania pliku itp.). Przeważnie znajduje się na nich tekst odpowiadający czynności podejmowanej po naciśnięciu (na przykład Load file).
Przyciski wyboru pozwalają na zdecydowanie, czy jakaś opcja ma być załączona, czy nie. Przycisk zacieniony odpowiada załączeniu opcji, niezacieniony - wyłączeniu.
Przyciski opcji są podobne do przycisków wyboru, z tym że używane są w grupach. W danej chwili aktywny może być tylko jeden z nich. Przycisk zacieniony jest włączony. Przyciski takie używane są do ustawiania opcji wykluczających się wzajemnie.
Menu i przyciski menu
Przyciski menu używane są do implementowania menu rozwijanych, kaskadowych i podręcznych. Menu to obiekt wyższego poziomu, zawierający przyciski menu, z którymi skojarzone są odpowiednie wartości lub polecenia. Poniżej zebrano elementy, które mogą wchodzić w skład menu.
Elementy kaskadowe - powodują wyświetlenie podmenu w momencie, gdy znajdzie się nad nimi kursor. Mają one funkcję podobną jak przycisk menu.
Przyciski polecenia - powodują wykonanie skojarzonego z nimi polecenia po ich uaktywnieniu. Ich funkcja odpowiada funkcji niezależnych przycisków polecenia.
Przyciski wyboru - przyciski te umieszczone w menu pozwalają na załączanie i wyłączanie pewnych opcji. Przycisk zacieniony odpowiada załączeniu opcji - podobną sytuację mieliśmy w przypadku niezależnych przycisków wyboru.
Przyciski opcji - podobne do przycisków wyboru, z tym że używane w grupach. Wybranie jednego z nich powoduje wyłączenie innych.
Separatory - służą do poprawienia wyglądu menu przez wstawienie poziomej linii. Nie jest z nimi związana żadna akcja.
Podstawowa różnica pomiędzy elementami menu a przyciskami niezależnymi jest taka, że elementy menu nie mogą istnieć samodzielnie, mogą występować tylko w kontekście obiektu menu.
Przycisk menu jest przyciskiem podobnym do przycisków polecenia. Naciśnięcie go nie powoduje jednak wykonania skryptu, ale otwarcie skojarzonego z nim menu. Zwykle na przycisku menu znajduje się tekst opisujący w jakiś sposób menu, które pojawi się po jego uaktywnieniu. Na przykład na przycisku, z którym skojarzone jest menu pozwalające na przeprowadzenie operacji typu zapisywanie czy wczytywanie plików, zwykle znajduje się tekst File.
Aktywować menu można umieszczając nad przyciskiem menu kursor i wciskając lewy klawisz myszy. Spowoduje to otwarcie skojarzonego z przyciskiem menu i wyświetlenie jego elementów na ekranie. Teraz można przesunąć wskaźnik myszy w dół i wybrać jeden z nich.
Menu File może przykładowo zawierać dwa przyciski polecenia (Open, służący do otwierania pliku i Quit - do zamykania programu), separator i element kaskadowy o etykiecie Save As. Menu pojawiające się po wybraniu elementu kaskadowego Save As może zawierać trzy przyciski poleceń, oznaczone na przykład Text, Ver1 i Ver2.
Listy rozwijane
Lista rozwijana pozwala użytkownikowi aplikacji na wybranie z listy jednej z wielu dostępnych pozycji. Jeśli pozycji jest więcej, niż można naraz wyświetlić, z listą należy skojarzyć paski przewijania, które umożliwią dostęp do pozycji niewidocznych na ekranie.
Paski przewijania
Paski przewijania używane są do kontrolowania tego, co pojawia się w innych obiektach. Należy skojarzyć je z obiektem, który do wyświetlania informacji dysponuje ograniczoną ilością miejsca, a wyświetlane dane mogą nie mieścić się w tym obszarze. Przykładem takiego obiektu może być rozwijana lista zawierająca dużo elementów.
Podsumowanie
Ten rozdział przedstawia podstawowe informacje dotyczące języków Tck i Tk. Choć porusza dość sporo zagadnień, pokazuje tylko niewielką część możliwości tych języków. Nie zostały opisane nawet tak podstawowe problemy, jak posługiwanie się tablicami, tworzenie funkcji i procedur itp. Również większość elementów interfejsu X została z konieczności pominięta. Jeśli chcesz poznać lepiej te języki, przeczytaj jedną z książek poświęconych im w całości.
Tk to tylko jedno z wielu rozszerzeń możliwości języka Tcl. Dostępnych jest również wiele innych pakietów wzbogacających ten język, np.:
Ak rozszerzenie pozwalające na nagrywanie i odtwarzanie dźwięku;
XF nteraktywny system projektowania interfejsu;
Tcl-DP rozszerzenie ułatwiające dystrybucję oprogramowania.
Jeśli chcesz dowiedzieć się więcej o innych kompilatorach dostępnych z systemem Linux, przejdź do rozdziału 30. „Inne kompilatory”.
Tworzenie skryptów CGI, do czego znakomicie nadaje się Perl, opisane jest w rozdziale 52. „Skrypty CGI"
490 Część V ♦ Linux dla programistów
490 E:\Moje dokumenty\HELION\Linux Unleashed\Indeks\29.DOC
E:\Moje dokumenty\HELION\Linux Unleashed\Indeks\29.DOC 479
Rozdzia³ 29. ♦ Podstawy języków Tcl i Tk 491