Używanie plików zasobów qrc w PyQt4
7 September 2009
Comments
Biblioteka Qt obsługuje pliki zasobów - pliki XML zawierające informacje o plikach "statycznych" używanych przez interfejs aplikacji (np. grafiki - ikony). W PyQt4 dostępne jest narzędzie pyrcc4, które parsuje plik zasobów i generuje klasę Pythona zawierającą wszystkie pliki określone w pliku zasobów (nie trzeba wtedy przejmować się ścieżkami do plików statycznych).
Tworzenie pliku zasobów
Pliki z zasobami tworzymy i zarządzamy w Qt Designerze poprzez "Przeglądarkę Zasobów" (menu "Widok" by włączyć jeżeli nie widzisz tego panelu). Klikając w ikonę "Edytuj Zasoby" pojawi się puste okno zasobów:
- Plik zasobów ma rozszerzenie qrc i zarządzany jest przez Qt Designera
- Tworząc interfejs tworzymy plik zasobów (jeden lub więcej).
- Po stworzeniu pliku zasobów możemy dodać do niego "przedrostki" - coś jak wirtualne katalogu pozwalające organizować zawarte w nim pliki
- Do danego przedrostka można dodawać pliki
- Plik zasobów qrc zostanie zapisany w tym samym katalogu co plik interfejsu (ui)
- Tworząc interfejs dla np. przycisków można ustawić ikonę - wybieramy wtedy opcję "wybierz zasób" i wybieramy dodany do zasobów plik



Wykorzystanie plików qrc w PyQt4
- Plik zasobów qrc konwertujemy do klasy Pythona za pomocą pyrcc4 (narzędzie PyQt4). W konsoli wykonaj:
pyrcc4 resources.qrc > resources_rc.pyGdzie resources_rc.py to wynikowy plik z kodem Pythona. PyQt4 domyślnie oczekuje takiego nazewnictwa pliku (choć można ręcznie później to zmienić w wygenerowanym pliku Pythona z pliku UI).
- Należy także zregenerować klasę Pythona wygenerowaną z pliku UI (za pomocą pyuic4)
- Aplikacja PyQt4 nie potrzebuje źródłowych plików, z których zasób został wygenerowany. Jeżeli zasoby wykorzystujemy w interfejsie to nie musimy robić nic więcej
Wykorzystywanie zasobów we własnym kodzie
- Zaimportuj klasę:from resources_rc import *
- Dostęp do danego zasobu otrzymamy za pomocą klasy QtCore.QResource:
QtCore.QResource(':przedrostek/nazwa_pliku.xyz')Znak : jest tutaj ważny i obowiązkowy.
if QtCore.QResource(':ikony/another_opera_icon_128.png').isValid(): print 'Ok' else: print 'Bad'
- To co zwróci zasób będzie wskazanym plikiem statycznym, który np. możemy ustawić jako ikonę elementu (jeżeli to grafika).
RkBlog
Comment article