PyQt5 QDockWidget – 为其设置Widget

  • Post category:Python

下面是关于使用Python的PyQt5库中的QDockWidget控件并为其设置Widget的完整使用攻略。

1. QDockWidget控件介绍

QDockWidget控件是一个可停靠的窗口部件,可以通过拖拽到主窗口的边缘停靠。QDockWidget可以在主窗口的边缘出现一个小的图标,在用户点击图标时可以展开和收起QDockWidget的内容。

2. 为QDockWidget设置Widget

在Qt中,QDockWidget并不能直接显示内容,需要设置一个Widget作为其内部包含的内容。可以使用setWidget()方法为QDockWidget设置一个Widget作为其内部的内容。

dock_widget = QDockWidget("title", self)
widget = QListWidget()
dock_widget.setWidget(widget)
self.addDockWidget(Qt.LeftDockWidgetArea, dock_widget)

在上面的示例中,我们创建了一个QDockWidget并设置标题为“title”,然后创建了一个QListWidget作为QDockWidget的内容,最后通过setWidget()方法设置QListWidget为QDockWidget的内容。

3. 完整示例1:QDockWidget展示QListWidget

下面是一个完整的示例,展示如何在QDockWidget中展示QListWidget。该示例中,我们将QDockWidget停靠到了主窗口的左边,并展示QListWidget。

from PyQt5.QtWidgets import QMainWindow, QListWidget, QDockWidget, QApplication
from PyQt5.QtCore import Qt
import sys

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.setWindowTitle("QDockWidget示例")
        self.setGeometry(100, 100, 800, 600)

        # 创建QListWidget
        self.list_widget = QListWidget()

        # 创建QDockWidget,设置标题并设置Widget为QListWidget
        self.dock_widget = QDockWidget("列表窗口", self)
        self.dock_widget.setWidget(self.list_widget)

        # 将QDockWidget停靠到主窗口的左边
        self.addDockWidget(Qt.LeftDockWidgetArea, self.dock_widget)

if __name__ == '__main__':
    app = QApplication(sys.argv)
    w = MainWindow()
    w.show()
    sys.exit(app.exec_())

执行上面的代码,可以看到一个主窗口和一个停靠在左边的QDockWidget,QDockWidget中展示了QListWidget。

4. 完整示例2:QDockWidget展示QLabel和QPushButton

下面是一个更加复杂的示例,展示如何在QDockWidget中展示多个控件。该示例中,我们将QDockWidget停靠到了主窗口的底部,并展示了一个QLabel和一个QPushButton。

from PyQt5.QtWidgets import QMainWindow, QLabel, QDockWidget, QPushButton, QGridLayout, QWidget, QApplication
from PyQt5.QtCore import Qt
import sys

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.setWindowTitle("QDockWidget示例")
        self.setGeometry(100, 100, 800, 600)

        # 创建QDockWidget和QVBoxLayout
        self.dock_widget = QDockWidget("底部窗口", self)
        self.layout = QGridLayout()

        # 在QDockWidget中添加QLabel和QPushButton
        self.label = QLabel("这是一个标签")
        self.button = QPushButton("这是一个按钮")
        self.layout.addWidget(self.label, 0, 0)
        self.layout.addWidget(self.button, 0, 1)

        # 创建QWidget并设置布局
        widget = QWidget()
        widget.setLayout(self.layout)

        # 将QWidget设置为QDockWidget的Widget
        self.dock_widget.setWidget(widget)

        # 将QDockWidget停靠到主窗口的底部
        self.addDockWidget(Qt.BottomDockWidgetArea, self.dock_widget)

if __name__ == '__main__':
    app = QApplication(sys.argv)
    w = MainWindow()
    w.show()
    sys.exit(app.exec_())

执行上面的代码,可以看到一个主窗口和一个停靠在底部的QDockWidget,QDockWidget中展示了一个QLabel和一个QPushButton。这个示例中,我们使用了QDockWidget和QVBoxLayout来展示多个控件。并且为了将多个控件组合到一起,我们使用了一个QWidget并为其设置了布局。