2016-03-23 67 views
1

我正在用Qt Designer創建一個Qt GUI。在設計師中,我將兩個小部件放置在一個QSplitter中(左側的一個小部件,右側的其他小部件)。在Qt Designer中添加的訪問窗口小部件

現在我想要分別控制每個小部件,但是我的MainWindow具有包含小部件及其內容(標籤,文本標籤等)的GUI python代碼。

有沒有辦法分別訪問小部件?這裏是我的代碼:

在主窗口:

if __name__ == "__main__": 

    import sys 
    app = QtGui.QApplication(sys.argv) 
    MainWindow = QtGui.QMainWindow() 
    ui = mw_gui.Ui_MainWindow() 
    ui.setupUi(MainWindow) 
    MainWindow.show() 

    img_widget = ImageWidget(MainWindow) 

    sys.exit(app.exec_()) 

在,我想用來控制右側插件的類:

class ImageWidget(QtGui.QWidget): 
    def __init__(self, parent, variables): 
     # self.ui = ui 
     # self.variables = variables 
     if not isinstance(parent, QtGui.QMainWindow): 
      raise TypeError('parent must be a QMainWindow') 
     super(ImageWidget, self).__init__() 

     self._parentWidget = parent 

我想訪問self.imglabel,這是在正確的小部件內,但它似乎沒有找到它。

回答

1

你應該能夠找到它的名稱和類型的控件:

imglabel = self.ui.findChild(QtGui.QLabel, "imglabel") 
1

你應該創建一個子類的主窗口,來自QMainWindowUi_MainWindow繼承。通過這種方法,全部在Qt Designer中添加的窗口小部件將作爲實例屬性變得可以訪問:

from PySide import QtGui 
from mw_gui import Ui_MainWindow 

class MainWindow(QtGui.QMainWindow, Ui_MainWindow): 
    def __init__(self): 
     super(MainWindow, self).__init__() 
     self.setupUi(self) 
     self.imglabel.setPixmap(QtGui.QPixmap('image.png')) 

if __name__ == "__main__": 

    import sys 
    app = QtGui.QApplication(sys.argv) 
    mainwindow = MainWindow() 
    mainwindow.show() 
    sys.exit(app.exec_()) 

處事這樣也意味着獨立的控制器類可能是沒有必要的,因爲你可以添加方法到MainWindow類。如果一切都在一個名稱空間中,設計就簡單多了。

相關問題