niedziela, 12 marca 2017

Okienka i ramki, dużo ramek.

Budowanie interface'u graficznego z użyciem Tkinter nie jest proste. Nie dostajemy żadnego wbudowanego narzędzia, za pomocą którego możemy tworzyć formularze za pomocą metody "drag and drop". Istnieją do tego zewnętrzne narzędzia, ale nie są one jakoś specjalnie rozwijane i w zasadzie nigdy z nich nie korzystałem.

Pisanie ręczne jest mozolne, a nanoszenie wszelkich poprawek dotyczących umiejscowienia elementów wymaga cierpliwości. Jednak jest to do zrobienia i robiłem to przy każdym interface'ie graficznym wykorzystującym metodę "place".

Dobrym nawykiem wydaje się grupowanie i zakotwiczanie elementów z zastosowaniem wielu ramek. Pozwala to na lepszą i wygodniejszą kontrolę nad obiektami, jeśli trzeba przesunąć większą ich ilość. Generalnie kompartmentacja tych elementów, podobnie jak kompartmentacja kodu jest dobrą praktyką. Interesującą sztuczką jest zastosowanie atrybutu "ttk.Frame" o nazwie "relief" i ustawieniu jego wartości na "GROOVE" (bez cudzysłowu). Granice ramki stają się widoczne, dzięki powstałemu na krawędziach zagłębieniu. Trzeba pamiętać również, że obiekty stylizowane "ttk" (prawie dosłowne tłumaczenie) mimo, że mogą należeć do tej samej rodziny co bazowe elementy, np. Button, Frame, czy Label, mogą posiadać inne opcje. To znaczy mogłoby wydawać się, że "ttk.Frame" utworzono dziedzicząc klasę "Frame", ale niestety nie działa to w ten sposób. Podany przykład jest celowy, ponieważ obiekt "Frame" generalnie służy tylko do zakotwiczania i grupowania elementów, a mimo tego istnieją różnice miedzy "Frame" i "ttk.Frame". W zasadzie nie wiem na jakich regułach oparto tworzenie obiektów "ttk", nigdy się w ten temat nie zagłębiałem. Dużą zaletą "ttk" jest możliwość tworzenia stylów, które możemy przypisywać do różnych elementów formularza, ponadto "ttk" rozpoznaje domyślny styl systemu i dostosowuje do niego wygląd prezentowanego okna programu.

Konsola języka Python "IDLE" została zbudowana z zastosowaniem Tkinter i obiektów stylizowanych "ttk".

Brak komentarzy:

Prześlij komentarz