RkBlog

Hardware, programming and astronomy tutorials and reviews.

Używanie plików zasobów qrc w PyQt4

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:

qrc1
  • 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
Oto przykładowy plik zasobów (qrc) z jedną ikoną:
qrc2
qrc3
Dzięki czemu możemy go wykorzystać w interfejsie aplikacji, np:
qrc4

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.py
    Gdzie 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')
    if QtCore.QResource(':ikony/another_opera_icon_128.png').isValid():
    	print 'Ok'
    else:
    	print 'Bad'
    
    Znak : jest tutaj ważny i obowiązkowy.
  • 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

PyQt, 7 September 2009, Piotr Maliński

Comment article