2012-06-25 4 views
5

Kilka lat temu napisałem narzędzie wiersza poleceń dla lokalnej społeczności stacji radiowych. Celem tej pracy było ulepszenie strumienia radiowego z metadanymi uzyskanymi z Kalendarza Google. Oznaczało to, że każdy, kto słucha stacji radiowej w strumieniu, byłby w stanie odczytać strumień aktualnych informacji o tym, co aktualnie gra i ile minut upłynie, aż do następnego pokazu.Ogólne układy i architektura zapewniające serwerowi z wiersza poleceń podstawowy interfejs użytkownika w systemie Ubuntu/Quckly?

Przeważnie ten skrypt działał bardzo dobrze i dawał dobrą obsługę przez lata.

Niedawno przyszedł do mnie nowy wymóg: użytkownicy tej aplikacji chcą od czasu do czasu zatrzymać, uruchomić lub ponownie załadować proces (np. Ponieważ informacje o rozkładzie zostały zmienione). Zamiast uczyć każdego członka personelu studia, jak korzystać z wiersza poleceń, pomyśleliśmy o nadaniu temu narzędziu prostego GUI.

Ponieważ aplikacja będzie rozwijana i uruchamiana tylko w systemie Ubuntu, wybraliśmy Szybko jako proste środowisko programistyczne. Jest dobrze udokumentowany i zapewnia małe obciążenia programistom, którzy poznają platformę.

Mamy nadzieję, że początkowy projekt aplikacji będzie składał się z wstęgi przycisków przeglądarki (start, stop, przeładowanie). Duży panel zawierający przewijany komunikat stanu. Poniżej pojawi się mały pasek statusu, który da wgląd w bieżący stan wewnętrzny programu.

Będąc całkowicie nowym do programowania GUI jestem jeszcze pewien, jak struktura UI: Główne tajemnice pozostają:

  1. Jakie kontroli powinny być stosowane do przewijania tekstu-panelu gdzie log-komunikaty pływ. To musi być tylko do odczytu, ale aktualizowane za każdym razem, gdy generowany jest komunikat dziennika. Zaplanowałem stworzenie niestandardowego programu do rejestrowania dzienników Pythona, który przekieruje wszelkie komunikaty dziennika do tego panelu - ale jaki jest najłatwiejszy sposób na zrobienie tego?

  2. Skrypt, który mam w tej chwili blokuje, gdy nie robi nic z time.sleep() - to oczywiście nie jest dobre dla GUI, więc jakie jest prawidłowe zachowanie dla procesu w aplikacji GUI, która nie ma nic wspólnego przez chwilę?

  3. Mój proces został pierwotnie zaprojektowany do pracy jako pojedynczy wątek w terminalu. Biorąc pod uwagę, że potrzebuję go, aby działał mniej więcej tak jak poprzednio, oznacza to, że powinienem rozważyć umieszczenie elementów GUI w osobnym wątku w procesie roboczym. Czy istnieją jakieś udokumentowane wzorce, jak to zrobić w ramach Szybkiej struktury?

  4. Przeprowadzka - czy istnieje dobry sposób na tworzenie aplikacji za pomocą Szybkiego uruchamiania na platformach innych niż Ubuntu? Na przykład mogę łatwo dostosować moją aplikację do pracy na dowolnym innym systemie operacyjnym opartym na systemie Linux. A co z czymś niezwiązanym ze sobą, takim jak OSX lub Windows?

Dzięki!

Odpowiedz

1
  1. Możesz użyć GtkTextView, tylko do odczytu. Może możesz rozszerzyć go na pipe-it z wyjściem.
  2. Możesz użyć idle_add() (dostępnej w Glib), aby uruchomić wywołanie metody/funkcji za każdym razem, gdy program jest bezczynny.
  3. Możesz chcieć sprawdzić How to work with threads in pygtk.
  4. PyGTK jest przenośny. Szybko jest wrapper do tworzenia aplikacji z PyGTK/PyGObject i kilka dodatkowych nicet.W zależności od kodu nie powinno być bardzo trudno go przenosić.
Powiązane problemy