RPI LCD Menu zaczyna zachowywać się jak menu

Tydzień minął jak z bicza strzelił, spieszę więc z update’m co ciekawego zdarzyło się w projekcie. Otóż…

Dobre przemyślenie struktury aplikacji to klucz do sukcesu.

Od początku planowałem pisać całość obiektowo. Porobiłem puste pliki na klasy, które chciałem stworzyć, aby rozdzielić poszczególne funkcjonalności. Pisząc kod często robiłem placeholdery (puste funkcje/zmienne) do późniejszego uzupełnienia. Dzięki temu miałem przemyślany zarys aplikacji i wszystko, co muszę robić, to implementacja poszczególnych funkcjonalności. Na początku poświęciłem sporo czasu, żeby to przygotować, bez szczególnych, widocznych na pierwszy rzut oka rezultatów. W tym tygodniu wystarczyło dopisać kilkadziesiąt linijek i z prostej listy, do której można było dodawać nic nie robiące obiekty z jednym stringiem, zrobić działające i nawigowalne menu.

Dobrze przygotuj IDE na początku, albo będziesz żałować później.

Niestety, przekonałem się o tym na własnej skórze. Jak można przeczytać w postach wcześniejszych, do rozwijania tego (i kilku innych) projektów używam Atoma. Początkowo zacząłem zabawy z nim właśnie od Pythona, stąd używałem tabulacji jako tabów. Potem musiałem napisać spory kawałek kodu w javascriptcie (node.js). Przestawiłem zatem znaki tabulacji na automatyczne 2 spacje (tak, aby było zgodnie ze standardem). Gdy wróciłem do projektu biblioteki, zaczęły się moje problemy. Ostatecznie dla projektu w Pythonie stosuje 4 spacje. Wtedy kod wydaje mi się najbardziej przejrzysty. Być może w przyszłości zmienię liczbę spacji, kiedy wybiorę już dogodny standard, który kod powinien utrzymywać. W tym momencie skupiam się bardziej na funkcjonalności 🙂 Warto mieć jednolite ustawienia we wszystkich projektach, lub poprawnie oddzielone w zależności od języka. Oszczędzi to wiele problemów na przyszłość.

Czyli co teraz jest zrobione?

Na dzień dzisiejszy biblioteka pozwala na wykonywanie jednopoziomowych, nawigowalnych i klikalnych menu. Po kliknięciu w wybrany element wykonuje się funkcja do niego przypisana. Przykład można zobaczyć tutaj, a efekt wygląda następująco: