2013-02-15 11 views
16

Używam PyQt od dłuższego czasu i przez cały czas, kiedy go używałem, istnieje całkiem spójny wzór programowania.Jak ładować pliki .ui do klas Pythona za pomocą PySide?

  1. Użyj Qt Designer, aby utworzyć plik .ui.
  2. Utwórz klasę python tego samego typu co widget utworzony w pliku .ui.
  3. Podczas inicjowania klasy Python, należy użyć programu uic, aby dynamicznie wczytać plik .ui do klasy.

Czy istnieje sposób na coś podobnego w PySide? Przeczytałem dokumentację i przykłady, a najbliższą rzeczą jaką mogłem znaleźć był przykład kalkulatora, który wstępnie renderował plik .ui do kodu Pythona, co jest super starym sposobem robienia tego w PyQt (dlaczego upiec go na pytonie? kiedy możesz po prostu parsować ui?)

+0

zawsze zorientowali, że lepiej, aby usunąć cały etap analizowania od uruchamiania aplikacji, i że posiadanie dynamiczne loadUi było bardziej wygodnym rozwiązaniem. – jdi

+0

@jdi "Better" jest subiektywne. Nieco szybciej ... może ..., To nie tak, że kod Pythona nie musi być analizowany, po prostu zastępujesz jeden typ analizowania dla innego. Jedną z głównych zalet pyqt jest szybki iteracyjny przepływ pracy dev. PySide dodając kolejny krok do tego idzie wstecz IMHO. –

+0

Zgadzam się z Twoją poprawką. Powinienem był sformułować to tak: "Osobiście właśnie uznałem to za prostsze". I myślę, że w dynamicznym ładowaniu jest jeszcze więcej analizowania. Najpierw musisz sparsować i przekonwertować kod Xml -> python, a następnie zbudować obiekty z tego. – jdi

Odpowiedz

20

Robię dokładnie to z PySide. :)

użyć tego https://gist.github.com/cpbotha/1b42a20c8f3eb9bb7cb8 (Original Sebastian Wiesner był w https://github.com/lunaryorn/snippets/blob/master/qt4/designer/pyside_dynamic.py ale zniknął) - który zastępuje PySide.QtUiTools.QUiLoader i dostarcza nową metodę loadUi() tak, że można to zrobić:

class MyMainWindow(QMainWindow): 
    def __init__(self, parent=None): 
     QMainWindow.__init__(self, parent) 
     loadUi('mainwindow.ui', self) 

Kiedy tworzysz instancję MyMainWindow, będzie to interfejs użytkownika zaprojektowany przez ciebie za pomocą Qt Designer.

Jeśli trzeba także używać własnych widgetów („Promocja” In Qt Designer), patrz tej odpowiedzi: https://stackoverflow.com/a/14877624/532513

+0

Cześć. Link do github wydaje się zepsuty. –

+0

Dzięki za heads-up! Udostępniłem moją zmodyfikowaną wersję pliku pyside_dynamic.py jako istotę, zobacz zmodyfikowaną odpowiedź. –