2017-06-28 49 views
1

我的目標是在python程序中帶一個.ui接口。 它幾乎沒有工作,但我想改進它,因爲我無法獲得我想要的。正確使用.ui與pyQt5

class MainWindow(QWidget): 

    def __init__(self): 
     super().__init__() 
     self.initUI() 

    def initUI(self): 
     self.ui = uic.loadUi('sss.ui') 
     mainLayout = QVBoxLayout() 
     mainLayout.addWidget(self.ui) 
     self.setLayout(mainLayout) 
     self.show() 

if __name__ == '__main__': 
    app = QApplication(sys.argv) 
    ex = MainWindow() 
    sys.exit(app.exec_()) 

現在我要創建一個佈局,我sss.ui粘貼到。 QVboxLayout不尊重我在Qt Designer中設置的樣式表。 如何直接使用我的sss.ui? 我需要轉換它嗎?我無法找到我的Qt安裝pyuic5 ...

回答

0

首先,獲得pyuic5可執行文件。嘗試重新安裝PyQt,在bin目錄(系統範圍,virtualenv等)中搜索它。

一旦你擁有了它,你應該使用它編譯.ui文件:

pyuic5 sss.ui > ui_sss.py 

然後在你的代碼中使用它:

import sys 

from PyQt5.QtWidgets import QWidget, QApplication 

from ui_sss import Ui_sss # if toplevel widget in .ui file is also called "sss" 


class MainWindow(QWidget): 
    def __init__(self, parent=None): 
     super(MainWindow, self).__init__(self, parent) 
     self.ui = Ui_sss() 
     self.ui.setupUi(self) 

if __name__ == '__main__': 
    app = QApplication(sys.argv) 
    w = MainWindow() 
    w.show() 
    sys.exit(app.exec_()) 
+0

的QApplication從PyQt5.QtWigdets我進口。 但evertything現在工作正常。 爲什麼轉換而不是使用.ui?更快,更容易? –

+0

對不起,我沒有自己運行這個代碼,我會修復它。首先,它在文檔示例中提供。其次,我不確定您是否可以動態地動態添加對象,但您可以自己檢查。第三,通過這種方式,您可以在爲其編寫代碼時獲得各種IDE幫助。是的,我不確定'.ui'文件解析是如何動態完成的,但我認爲準備Python代碼比解析XML更快。 – bakatrouble