PyQt5 QDockWidget – 在它里面设置多个widget

  • Post category:Python

PyQt5是Python中使用广泛的GUI库之一,它提供了多种工具和控件,包括QDockWidget,可以方便地实现多功能窗口。 QDockWidget是可停靠在QMainWindow中的控件,允许用户通过拖动它们来重新排列主窗口中的布局。

在使用QDockWidget时,有时需要在其内部放置多个控件,方便用户进行更多的操作。下面,我们将提供一个完整使用PyQt5 QDockWidget设置多个widget的攻略。

步骤一:创建主窗口

首先,我们需要创建一个QMainWindow作为主窗口。我们可以使用以下代码来创建一个简单的主窗口:

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow

app = QApplication(sys.argv)

main_window = QMainWindow()
main_window.show()

sys.exit(app.exec_())

步骤二:创建Dock窗口

接下来,我们需要创建一个或多个QDockWidget作为我们的停靠窗口。我们可以使用以下代码来创建一个基本的QDockWidget:

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QDockWidget, QWidget

app = QApplication(sys.argv)

main_window = QMainWindow()

dock_widget = QDockWidget("My DockWidget")
main_window.addDockWidget(dock_widget)

sys.exit(app.exec_())

在上述代码中,我们创建了一个名为“My DockWidget”的QDockWidget,并使用addDockWidget方法将其添加到主窗口中。

步骤三:添加控件

接下来,我们需要在DockWidget中放置我们的控件。我们可以使用setWidget方法在QDockWidget中添加一个QWidget控件:

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QDockWidget, QWidget, QLabel

app = QApplication(sys.argv)

main_window = QMainWindow()

dock_widget = QDockWidget("My DockWidget")
main_window.addDockWidget(dock_widget)

widget = QWidget()
label1 = QLabel("Label1")
label2 = QLabel("Label2")
widget_layout = QVBoxLayout()
widget_layout.addWidget(label1)
widget_layout.addWidget(label2)
widget.setLayout(widget_layout)

dock_widget.setWidget(widget)

sys.exit(app.exec_())

在上述代码中,我们首先创建了一个QWidget对象,并向其添加了两个QLabel控件。然后,我们使用QVBoxLayout来布局控件,最后通过setWidget方法将其添加到我们的QDockWidget对象中。

示例一:将QTableWidget添加到QDockWidget中

以下示例演示如何将QTableWidget添加到QDockWidget中,在QTableWidget内添加多个行和列:

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QDockWidget, QTableWidget, QTableWidgetItem

app = QApplication(sys.argv)

main_window = QMainWindow()

dock_widget = QDockWidget("Table Widget")
main_window.addDockWidget(dock_widget)

table_widget = QTableWidget()
table_widget.setRowCount(5)
table_widget.setColumnCount(3)
header = ["Column 1", "Column 2", "Column 3"]
table_widget.setHorizontalHeaderLabels(header)

for i in range(table_widget.rowCount()):
    for j in range(table_widget.columnCount()):
        table_widget.setItem(i, j, QTableWidgetItem("Item ({},{})".format(i, j)))

dock_widget.setWidget(table_widget)

main_window.show()

sys.exit(app.exec_())

在上述代码中,我们创建了一个名为“Table Widget”的QDockWidget对象,并创建了一个QTableWidget对象。然后我们添加了五个行和三个列,并设置了行和列的标头。最后,我们为每个单元格添加了QTableWidgetItem。

示例二:将 QTextEdit和QPushButton添加到QDockWidget中

以下示例演示如何将QTextEdit和QPushButton添加到QDockWidget中,并将QPushButton与QTextEdit关联:

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QDockWidget, QTextEdit, QPushButton, QVBoxLayout, QWidget

app = QApplication(sys.argv)

main_window = QMainWindow()

dock_widget = QDockWidget("Text Editor")
main_window.addDockWidget(dock_widget)

widget = QWidget()
layout = QVBoxLayout()

text_edit = QTextEdit()
layout.addWidget(text_edit)

button = QPushButton("Save")
button.clicked.connect(lambda : print(text_edit.toPlainText()))
layout.addWidget(button)

widget.setLayout(layout)

dock_widget.setWidget(widget)

main_window.show()

sys.exit(app.exec_())

在上述代码中,我们创建了一个名为“Text Editor”的QDockWidget对象,并创建了一个QWidget对象。然后,我们在QWidget对象上添加了QTextEdit控件和QPushButton控件,并将QPushButton控件连接到一个按下事件,以将QTextEdit内容打印到控制台。

总结

使用QDockWidget可以很容易地将多个控件和工具集成到程序中,并且它们可以方便地停靠在应用程序的主窗口中。通过addDockWidget方法将QDockWidget添加到QMainWindow中,可以在主窗口中方便地调整它们的布局。在每个QDockWidget中使用setWidget方法添加QWidget控件,可以轻松地在QDockWidget中添加控件。