2016-03-23 13 views
1

Ich erstelle eine Qt GUI mit Qt Designer. Im Designer platziere ich zwei Widgets in einem QSplitter (ein Widget auf der linken Seite, ein anderes Widget auf der rechten Seite).Zugriff Widgets in Qt Designer hinzugefügt

Die Sache ist, dass ich jetzt jedes Widget einzeln steuern möchte, aber mein MainWindow hat den GUI-Python-Code von allem darin, einschließlich sowohl Widgets als auch deren Inhalt (Etiketten, Textbeschriftungen, usw.).

Gibt es eine Möglichkeit, auf die Widgets separat zuzugreifen? Hier ist mein Code:

Auf dem Mainwindow:

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_()) 

In der Klasse, die ich verwenden möchte, die rechte Seite Widget zu steuern:

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 

Ich möchte self.imglabel zugreifen zu können, die ist innerhalb des richtigen Widgets, aber es scheint nicht zu finden.

Antwort

1

sollten Sie in der Lage sein, einen Widget mit seinem Namen und den Typ zu finden:

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

Sie sollen eine Unterklasse für die Hauptfenster erstellen, sowohl aus QMainWindow und Ui_MainWindow vererben. Mit diesem Ansatz werden alle in Qt Designer hinzugefügt Widgets werden zugänglich werden als Instanzattribute:

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_()) 

Dinge zu tun, auf diese Weise bedeutet auch separate Controller-Klassen wahrscheinlich nicht notwendig sind, da Sie nur Methoden zum MainWindow Klasse hinzufügen. Das Design ist viel einfacher, wenn alles in einem Namensraum ist.