2017-03-24 56 views
0

的dockwidget如果我創建了一個QMainWindow的實例,並指定中央物件和碼頭小部件是:在PyQt的,如何訪問一個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) 

那麼我想我能訪問到Instance.centralWidget()的中心小部件A,但我怎樣才能在LeftDockWidgetArea中同樣訪問dockwidget? (例如,我想在創建實例後修改該dockwidget中的Widget的屬性)

+0

'self.dockWidget = MyDockWidget'。 – ekhumoro

+0

如果我將它添加到__init __(),並稍後更新dockWidget。我是否必須手動替換或更新MainWindow的LeftDockWIdgetArea? – Xueshi

+0

爲什麼不試試看看會發生什麼? – ekhumoro

回答

0

當然,QMainWindow可以添加QDockWidget s。

但是QDockWidgets沒有親子關係,因此QDockWidget沒有實現QMainWindow的基本方法。 我有一個解決方案。

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 

如果你想獲得QMainWindow的訪問,你把每一次self.test_dockwidget.added_parent

QDockWidgetArea絕對與QMainWindow相加。

如果您使用獨立的小部件,您將使用setParent()方法,而不是這種方式。大多數情況下,沒有機會這樣做。

我做了QDockWidget的一個子類,因爲我沒有直接在我的應用上創建屬性。

雖然我不知道原因。