2017-03-24 1 views
0

Wenn ich eine QMainWindow Instanz erstellt haben, und ordnen Sie die zentrale Widget und Dock-Widgets für sie:In pyqt, wie man die dockwidget Zugriff auf QDockWidgetArea QMainWindow

class MyWindow(QtGui.QMainWindow): 
    def __init__(self, MyCentralWidget, MyDockWidget): 
     super(MyWindow,self).__init__() 
     self.setCentralWidget(MyCentralWidget) 
     self.addDockWidget(Qt.LeftDockWidgetArea,MyDockWidget) 
     self.show() 

Instance=MyWindow(A,B) 

Dann denke ich, dass ich Zugang zu bekommen in der Mitte Widget A von Instance.centralWidget(), aber wie bekomme ich ähnlich Zugriff auf die Dockwidget in der LeftDockWidgetArea? (Zum Beispiel möchte ich die Eigenschaften des Widgets in diesem Dockwidget ändern, nachdem die Instanz erstellt wurde)

+0

'self.dockWidget = MyDockWidget'. – ekhumoro

+0

Wenn ich das zu dem __init __() hinzufüge und das dockWidget später aktualisiere. Muss ich die LeftDockWIdgetArea des MainWindow manuell ersetzen oder aktualisieren? – Xueshi

+0

Warum nicht einfach versuchen und sehen, was passiert? – ekhumoro

Antwort

0

Natürlich kann QMainWindow hinzufügen QDockWidget s.

Aber QDockWidgets nicht Eltern-Kind-Beziehung machen.So QDockWidget haben keine grundlegende Methode zur Erreichung QMainWindow. Ich habe eine Lösung dafür.

from PySide import QtGui 
from PySide import QtCore 
import sys 

class ParentGetDockWindow(QtGui.QDockWidget): 
    def __init__(self,parent=None): 
     super(ParentGetDockWindow,self).__init__(parent=None) 
     self.added_parent = None 
class MainWindow(QtGui.QMainWindow): 
    def __init__(self,parent=None): 
     super(MainWindow,self).__init__(parent=None) 
     self.test_dockwidget = ParentGetDockWindow() 
     self.addDockWidget(QtCore.Qt.DockWidgetArea.RightDockWidgetArea,self.test_dockwidget) 
     #here! 
     self.test_dockwidget.added_parent = self 

Wenn Sie einen Zugang zu QMainWindow erhalten möchten, nehmen Sie self.test_dockwidget.added_parent jedes Mal.

QDockWidgetArea wird absolut mit QMainWindow hinzugefügt.

Wenn Sie ein unabhängiges Widget verwenden, verwenden Sie anstelle dieser Methode setParent() Methode.In den meisten Fällen gibt es keine Möglichkeit, es zu tun.

Ich habe eine Unterklasse von QDockWidget gemacht, weil ich das Attribut nicht direkt in meiner App erstellen konnte.

Ich weiß nicht den Grund, obwohl.

Verwandte Themen