2016-03-23 7 views
1

Qt Designerを使用してQt GUIを作成しています。デザイナーでは、QSplitterに2つのウィジェットを配置します(左側に1つのウィジェット、右側に他のウィジェット)。Qtデザイナーでアクセスウィジェットを追加しました

今は、それぞれのウィジェットを別々に管理したいのですが、私の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クラスにメソッドを追加することができますので、別のコントローラクラスは、おそらく必要ないことを意味します。すべてが1つの名前空間に入っていると、設計がずっと簡単になります。

関連する問題