Desktopowy klient Pytigon używa systemu wtyczek do rozszerzania funkcjonalności bez modyfikowania kodu core.
Wtyczki to moduły Python, które są dynamicznie wykrywane, pobierane i inicjowane przy starcie aplikacji.
System wtyczek przeszukuje trzy katalogi:
- pytigon_path/appdata/plugins/ — wbudowane wtyczki
- data_path/plugins/ — wtyczki zainstalowane przez użytkownika
- cwd/plugins/ — wtyczki specyficzne dla aplikacji
Wtyczki w podkatalogu auto/ lub wymienione w konfiguracji auto_plugins są ładowane automatycznie przy starcie. Wtyczki ręczne można ładować na żądanie.
Każdy moduł wtyczki może eksportować funkcję init_plugin(app, frame, panels):
def init_plugin(app, frame, panels):
"""Wywoływana, gdy wtyczka jest ładowana.
Args:
app: Instancja wx.App
frame: Główna ramka aplikacji
panels: Dostępne kontenery paneli
"""
# Rejestracja niestandardowych kontrolek, przycisków paska narzędzi lub modyfikacja UI
pass
/schsys/plugins/<plugin>/plugins_cache/Wtyczki mogą:
- Rejestrować niestandardowe kontrolki — dodawać nowe widgety wxPython lub modyfikować istniejące przez system guictrl.factory
- Dodawać przyciski paska narzędzi — rozszerzać paski narzędzi o niestandardowe akcje
- Modyfikować przestrzeń nazw — dynamicznie rozszerzać przestrzeń nazw guictrl.ctrl (np. klasa przeglądarki HTML2 jest ustawiana przez wtyczki webview, takie jak cef czy wxwebview)
- Tworzyć podstrony potomne — new_plugin_child_page() tworzy dynamiczne strony notebooka z danych wtyczki
- Obsługiwać zdarzenia — łączyć się z systemem sygnałów/zdarzeń
Nazwy wtyczek są parsowane z wierszy danych konfiguracyjnych z data == "plugins". Wartości to rozdzielone średnikami ścieżki wtyczek, np.:
standard/keymap;standard/install
To ustawia app.plugins na listę aktywnych wtyczek.
Użyj import_plugin() z guilib.tools, aby dynamicznie załadować wtyczki przez nazwę modułu z kropkami:
from pytigon_gui.guilib.tools import import_plugin
my_plugin = import_plugin('plugins.my_plugin')