TOOLKIT · PySide/QtOKNO · PublishKLIKNIĘĆ DO CELU · 1
Rozdział 16 / Narzędzia

Interfejsy dla artystów: PySide/Qt bez zgadywania

Narzędzie, które trzeba tłumaczyć na Slacku, jest złym narzędziem — jak projektuje się okno, które artysta rozumie bez czytania dokumentacji.

TL;DR

Rozdział 15 zostawił narzędzie odporne na błędy, ale wciąż uruchamiane ze Script Editora. PySide (oficjalne bindingi Pythona do biblioteki Qt) to standard, w którym niemal każdy DCC pozwala budować własne okna, dokładnie w tym samym języku, którego używa reszta narzędzia. Sama technologia nie gwarantuje jednak niczego — dobre i złe narzędzia bywają zbudowane w dokładnie tym samym toolkicie. Różnica leży w decyzjach projektowych, nie w bibliotece.

Etap: Interfejs jako model myślenia artysty

Pokaż to, co już wiesz — nie pytaj ponownie

Najczęstszy błąd początkującego narzędzia to okno, które odzwierciedla wewnętrzną strukturę kodu, zamiast pytania, jakie faktycznie zadaje sobie artysta. Narzędzie z Rozdziału 15 już wie, w jakim jest showcie, shocie i tasku — dobry interfejs pokazuje to jako informację, nie prosi o ponowne wpisanie. Podobnie numer kolejnej wersji: skoro narzędzie potrafi go wyliczyć samo, artysta nie powinien go wpisywać ręcznie — powinien go zobaczyć, gotowego, z możliwością kliknięcia „Publish" bez dotykania niczego innego.

UI.wireframeOkno Publish, dobre domyślne
Publish hero_char / rig / shot0100 Wersja v035 (auto) Komentarz (opcjonalnie) Publish Anuluj ← kontekst wykryty automatycznie, nie do edycji ← wypełnione samo, nikt nie liczy wersji ręcznie ← jedno kliknięcie do celu, jeśli wszystko OK
Etap: Zawieszone okno wygląda jak awaria

Feedback podczas długiej operacji nie jest opcjonalny

Publikacja z Rozdziału 7 bywa operacją trwającą kilkadziesiąt sekund — eksport geometrii, zapis przez Perforce, aktualizacja systemu śledzenia. Jeśli w tym czasie okno narzędzia nie reaguje na żaden ruch myszy, artysta prawie zawsze zakłada, że coś się zawiesiło, i wymusza zamknięcie programu — tracąc niezapisaną pracę, której samo narzędzie nie miało nic wspólnego z powodowaniem. Dlatego każda operacja dłuższa niż ułamek sekundy potrzebuje paska postępu albo choćby prostego komunikatu „trwa publikacja".

To nie jest tylko kwestia estetyki. Interfejs Qt działa w tej samej głównej pętli zdarzeń, co reszta DCC — jeśli operacja publikacji zostanie napisana tak, że blokuje tę pętlę zamiast działać w tle, naprawdę zamraża całą aplikację, nie tylko okno narzędzia. Artysta, który w tym momencie próbuje kliknąć gdziekolwiek indziej w Mayi, dostaje potwierdzenie swoich najgorszych podejrzeń. Poprawnie napisane narzędzie przenosi taką operację do osobnego wątku, żeby reszta programu — i sam pasek postępu — mogła nadal odpowiadać.

Słowniczek
PySide / Qt
Biblioteka do budowy interfejsów graficznych, standardowo osadzona w większości DCC.
Wartość domyślna
Pole formularza wypełnione z góry sensowną wartością, żeby happy path wymagał minimum interakcji.
Event loop (pętla zdarzeń)
Mechanizm, w którym aplikacja czeka na i obsługuje zdarzenia (klik, ruch myszy); zablokowanie go zamraża cały program.
Wątek (thread)
Niezależna ścieżka wykonania kodu, pozwalająca długiej operacji nie blokować reszty interfejsu.