Aplikacja okienkowa: Layouty i Widgety
workshop: #lesson-6.html
Zasoby lekcji
Warsztat: 5
Przygotowanie
- Dla systemu Linux zainstaluj pakiet
python3-tk
odpowiadający za renderowanie UI - W katalogu domowym przygotuj katalog
AD
, a w nimmod5
- Stwórz pliki aplikacji z rozszerzeniem
py
do wskazanych zadań - Wprowadź tymczasowe modyfikacje kodu we wskazanych zadaniach i porównaj efekt
Aby renderowanie Widgetów TK było możliwe należy zaimportować z pakietu tkinter
wszystkie klasy Widgetów do skryptu aplikacji.
Klasy w Pythonie instancjonowane są BEZ słówka kluczowego new. Osoby, które kodowały i modyfikowały system Linux powinny być zaznajomione ze słówkiem geometry
,
które oznacza rozmiar (często również pozycję) wskazanego elementu. W tym przypadku jest to rozmiar okna podany jako ciąg znakowy String dla właściwości szerokości i wysokości odpowiednio.
W przeciwieństwie do aplikacji pisanych w innych językach, gdzie składowe programu należało umieścić w metodzie main
(Java, C) we frameworku TK
Pythona jako ciało pętli jest traktowany cały kod do metody pętli mainloop()
We frameworku TK
możemy wyróżnić trzy sposoby (metody) układania elementów:
pack( side=?, expand=?, fill=? )
- upakowuje kontrolki jedna po drugiej w domyślne lub wskazane miejsce (LEFT
,TOP
,RIGHT
,BOTTOM
) Okna lub Ramki. W tym miejscy należy zaznaczyć podobieństwo doBorderLayout
z Javy jedynie z pominięciem nieistniejącej w Pythonie przestrzeniCENTER
.place( x=?, y=? )
- pozwala rozlokować wskazaną kontrolkę we wskazanej pozycjix
,y
co jest synonimem pozycjonowania absolutnego.grid( row=?, column=? )
- tworzy siatkę o rozmiarze najwyższej wartości wiersza i kolumny oraz umieszcza kontrolkę w podanej komórce siatki. Komórki siatki posiadają możliwość łączenia się z sąsiednimi komórkami dzięki atrybutom:columnspan
orazrowspan
. Za rozmieszczenie kontrolek komórki lub treści w komórce służą atrybuty:stricky
orazanchor
Powyższe metody: pack(), place() oraz grid() można wywołać a) na zmiennej referencyjnej kontrolki lub b) zaraz za samą kontrolką co przedstawia kod:
lbl1 = Label(box, text="Etykieta")
lbl1.pack()Label(box, text="Etykieta").pack()
Efekt programu z listingu 5.3
przedstawia poniższe zdjęcie, na którym Frame z żółtym tłem jest rozciągnięty na całą szerokość okna,
natomiast Frame z niebieskim tłem znajduje się pomiędzy Framem czerwonym, a zielonym.

Co jednak zrobić, żeby osiągnąć inne efekty, np.:
- Frame żółty ma znajdować się pomiędzy Framem czerwonym, a zielonym
- Frame niebieski ma być rozciągnięty na całą szerokość okna