python - 收集所有停靠的小部件及其位置

标签 python qt pyside qmainwindow qdockwidget

PySide 有没有办法收集所有停靠的小部件,以及它们是停靠在主窗口的左侧还是右侧?

如果我的第一个问题没有答案,我怎样才能至少找出一个小部件是停靠在左侧还是右侧?

from PySide import QtCore, QtGui


class MainWindow(QtGui.QMainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()

        self.textEdit = QtGui.QTextEdit()
        self.setCentralWidget(self.textEdit)

        self.createActions()
        self.createMenus()
        self.createToolBars()
        self.createStatusBar()
        self.createDockWindows()

        self.setWindowTitle("Dock Widgets")

    def createActions(self):
        self.toggleLeftAct = QtGui.QAction(
                "&Toggle Left", self, shortcut=QtGui.QKeySequence("Ctrl+L"),
                statusTip="Toggle Left Sidebar",
                triggered=self.toggleLeft)

        self.toggleRightAct = QtGui.QAction(
                "&Toggle Right", self, shortcut=QtGui.QKeySequence("Ctrl+R"),
                statusTip="Toggle Right Sidebar",
                triggered=self.toggleRight)

    def createMenus(self):
        self.fileMenu = self.menuBar().addMenu("&File")
        self.fileMenu.addAction(self.toggleLeftAct)
        self.fileMenu.addAction(self.toggleRightAct)

        self.viewMenu = self.menuBar().addMenu("&View")

    def createToolBars(self):
        self.fileToolBar = self.addToolBar("File")
        self.fileToolBar.addAction(self.toggleLeftAct)
        self.fileToolBar.addAction(self.toggleRightAct)

    def createStatusBar(self):
        self.statusBar().showMessage("Ready")

    def createDockWindows(self):
        self.dockCustomers = QtGui.QDockWidget("Customers", self)
        self.dockCustomers.setAllowedAreas(QtCore.Qt.LeftDockWidgetArea | QtCore.Qt.RightDockWidgetArea)
        self.customerList = QtGui.QListWidget(self.dockCustomers)
        self.dockCustomers.setWidget(self.customerList)
        self.addDockWidget(QtCore.Qt.RightDockWidgetArea, self.dockCustomers)
        self.viewMenu.addAction(self.dockCustomers.toggleViewAction())

        self.dockParagraphs = QtGui.QDockWidget("Paragraphs", self)
        self.paragraphsList = QtGui.QListWidget(self.dockParagraphs)
        self.dockParagraphs.setWidget(self.paragraphsList)
        self.addDockWidget(QtCore.Qt.RightDockWidgetArea, self.dockParagraphs)
        self.viewMenu.addAction(self.dockParagraphs.toggleViewAction())

    def toggleLeft(self):
        print self.dockCustomers
        print self.dockParagraphs

    def toggleRight(self):
        print 'toggle Right'

if __name__ == '__main__':

    import sys

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

最佳答案

没有方便的方法来获取停靠小部件的列表。但是,每当添加停靠小部件时,它都会自动重新定位到主窗口,因此您可以使用 findChildren主窗口的方法:

for dock in self.findChildren(QtGui.QDockWidget):
    print(dock.windowTitle())

可以通过 dockWidgetArea 找到当前停靠小部件所在的区域。主窗口方法:

    area = self.dockWidgetArea(dock)
    if area == QtCore.Qt.LeftDockWidgetArea:
        print dock.windowTitle(), '(Left)'
    elif area == QtCore.Qt.RightDockWidgetArea:
        print dock.windowTitle(), '(Right)'

关于python - 收集所有停靠的小部件及其位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47206667/

相关文章:

python - 具有多个 header 的 QStandardItemModel - 将 QTreeView header 与模型分离

python - 如何将数据添加到二进制文件中?

python - 根据条件更改 tensorflow 张量的值

python - Twitter API - 如何获取用户的实时推文

python - 如果从数据库中删除相关对象,为什么 Redis 会删除对象中的关系?

python - PyQt : How to set a mask over a QWidget to ignore mouse events but get the children events

c++ - 通过源模型返回标志使我的项目不活动(灰色)

c++ - qt 文件读取行总是在第二次读取时返回 -1

qt - 哪个c++编译器用qt5 win7

python - PyQt - 在其他函数运行时显示 GIF