2012-05-16 63 views
2

我已經在pyqt4中創建了一個自定義小部件,我已經開發並測試過,現在已準備好將其加載到我的主窗口中。由於它不在設計器中顯示,我需要手動將它手動添加到我的主窗口。已添加到佈局的PyQt4自定義小部件(uic加載)不可見

我的Widget使用UIC加載UI文件,而不是將其轉換爲PY文件(它已經這麼遠快麻煩更少)的,所以它看起來是這樣的:

class widgetWindow(QtGui.QWidget): 
    def __init__(self, parent = None): 
     super(widgetWindow, self).__init__(parent) 
     self.ui = uic.loadUi("widget.ui") 
    #everything else 

現在我的主類(例如爲了簡潔)創建的佈局,小部件添加到佈局,然後將其添加到主窗口部件

class main(QtGui.QMainWindow): 
    def __init__(self, parent = None): 
     super(main, self).__init__(parent) 
     self.ui = uic.loadUi("testWindow.ui") 
     mainlayout = QtGui.QVBoxLayout() 
     window = widgetWindow(self) 
     mainlayout.addWidget(window) 
     centerWidget = QtGui.QWidget() 
     centerWidget.setLayout(mainlayout) 
     self.ui.setCentralWidget(centerWidget) 

沒有錯誤拋出,並且它將使空間小部件,但它只是贏了」什麼都不顯示。

在窗口中添加window.ui.show()會彈出一個新的窗口,超過它應該佔據主窗口的空間。我錯過了什麼?

回答

2

做一些比較研究,UIC的裝載機,有兩種方法來裝入ui文件。我在問題中使用它的方式是一種方式,另一種方式是使用uic.loadUiType()。這將創建基類和表單類,以便由類對象繼承,而不僅僅是QtGui.QWidget類對象。

widgetForm, baseClass= uic.loadUiType("addTilesWidget.ui") 

class windowTest(baseClass, widgetForm): 
    def __init__(self, parent = None): 
     super(windowTest, self).__init__(parent) 
     self.setupUi(self) 

這樣,窗口小部件就可以按照預期加載到另一個窗體中。至於爲什麼,我還沒有找到答案。

在不同的設置類型的一些詳細信息:http://bitesofcode.blogspot.com/2011/10/comparison-of-loading-techniques.html

0

嘗試父參數添加到loadUi聲明:

self.ui = uic.loadUi("widget.ui",parent) 
    self.ui = uic.loadUi("testWindow.ui",self) 

,並嘗試以下行主類的結尾。

self.setCentralWidget(centerWidget) 
+0

我確實有setCentralWidget,只是未能得到複製到這個問題,我現在已經更新了它的問題。不幸的是,將父母/自我添加到loadUi中並沒有多大作用。 – ooklah

0

您需要指定'centerWidget'是主窗口的中心控件。 即你的類代碼主要應該有這樣一行: self.setCentralWidget(centerWidget)

class main(QMainWindow): 
    def __init__(self, parent = None):    
     super(main, self).__init__(parent) 
     .... 
     self.setCentralWidget(centerWidget) 

+0

當我寫下這個問題時,它不見了,但它在我的測試課上。我已經更新了這個問題來反映這一點。 – ooklah

相關問題