2013-02-15 58 views
16

我已經使用了PyQt很長一段時間了,並且在使用它的整個過程中,都有一個非常一致的編程模式。如何使用PySide將.ui文件加載到python類上?

  1. 使用Qt Designer創建.ui文件。
  2. 創建一個與您在.ui文件中創建的小部件相同類型的python類。
  3. 當初始化python類時,使用uic將.ui文件動態加載到類上。

有什麼辦法可以在PySide中做類似的事情嗎?我已經閱讀了文檔和示例,並且我能找到的最接近的東西是一個計算器示例,它將.ui文件預渲染爲python代碼,這是在PyQt中執行此操作的超級老方法(爲什麼要將它燒成python當你只能解析用戶界面?)

+0

我總想這是更好地從應用程序啓動整個解析步驟,使用具有動態loadUi更具開發便利性。 – jdi 2013-09-30 20:06:09

+0

@jdi「更好」是主觀的。稍微快一點...也許...,這不像是不需要分析python ui代碼,你只是用一種類型的解析代替另一種解析。 pyqt的主要優點之一是快速迭代開發工作流程。 PySide增加了另一個步驟,恕我直言。 – 2013-10-01 22:41:36

+0

我同意你的更正。我應該說它是「我個人認爲它更直接」。而且我認爲在動態加載中還有更多的解析。您首先必須解析並轉換UI xml - > python代碼,然後再構建這些對象。 – jdi 2013-10-02 02:26:32

回答

20

我正在用PySide做這件事。 :)

使用此https://gist.github.com/cpbotha/1b42a20c8f3eb9bb7cb8(塞巴斯蒂安·威斯納原來是在https://github.com/lunaryorn/snippets/blob/master/qt4/designer/pyside_dynamic.py但已經消失了) - 它覆蓋PySide.QtUiTools.QUiLoader並提供了一個新的loadUi()方法,這樣就可以做到這一點:

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

當你實例化MyMainWindow時,它將擁有你用Qt Designer設計的UI。

如果您還需要使用自定義的小部件(「促進」 Qt設計師),看到這樣的回答:https://stackoverflow.com/a/14877624/532513

+0

你好。 github的鏈接似乎破裂了。 – 2015-10-09 10:28:53

+0

感謝您的提醒!我已經提供了我自己修改後的pyside_dynamic.py版本作爲要點,請參閱修改後的答案。 – 2015-10-09 13:42:08

相關問題