PyQt5 QDockWidget是一种可用于放置多个小部件(Widget)的窗口部件,它可以创建布局和作为应用程序的插件。在这里,我们将学习如何在QDockWidget中设置多个小部件,以下是完整使用攻略:
1. 引入模块
在使用QDockWidget之前,我们必须导入必要的模块。
from PyQt5.QtWidgets import QApplication, QMainWindow, QTextEdit, QDockWidget, QListWidget, QVBoxLayout, QWidget
import sys
2. 创建主窗口
在使用QDockWidget之前,我们需要创建一个主窗口。
class MyApp(QMainWindow):
def __init__(self):
super().__init__()
self.init_ui()
def init_ui(self):
self.setWindowTitle('QDockWidget')
self.setFixedSize(400, 400)
central_widget = QTextEdit()
self.setCentralWidget(central_widget)
3. 创建QDockWidget
在主窗口上创建QDockWidget,然后将其添加到主窗口中。
class MyApp(QMainWindow):
def __init__(self):
super().__init__()
self.init_ui()
def init_ui(self):
self.setWindowTitle('QDockWidget')
self.setFixedSize(400, 400)
self.dock = QDockWidget('Dockable', self)
self.addDockWidget(self.dock)
# 设置dock为可以停靠到左侧、右侧位置
self.dock.setAllowedAreas(Qt.LeftDockWidgetArea | Qt.RightDockWidgetArea)
central_widget = QTextEdit()
self.setCentralWidget(central_widget)
4. 向QDockWidget添加小部件
使用QVBoxLayout创建一个QWidget,然后将其添加到QDockWidget中。我们创建一个QListWidget和QTextEdit,然后添加到QWidget上。
class MyApp(QMainWindow):
def __init__(self):
super().__init__()
self.init_ui()
def init_ui(self):
self.setWindowTitle('QDockWidget')
self.setFixedSize(400, 400)
self.dock = QDockWidget('Dockable', self)
self.addDockWidget(Qt.RightDockWidgetArea, self.dock)
# 设置dock为可以停靠到左侧、右侧位置
self.dock.setAllowedAreas(Qt.LeftDockWidgetArea | Qt.RightDockWidgetArea)
dock_widget = QWidget()
layout = QVBoxLayout(dock_widget)
list_widget = QListWidget()
layout.addWidget(list_widget)
text_edit = QTextEdit()
layout.addWidget(text_edit)
self.dock.setWidget(dock_widget)
central_widget = QTextEdit()
self.setCentralWidget(central_widget)
此时,QDockWidget就添加了两个小部件,一个QListWidget和一个QTextEdit。
示例一:在QDockWidget中添加一个PushButton
class MyApp(QMainWindow):
def __init__(self):
super().__init__()
self.init_ui()
def init_ui(self):
self.setWindowTitle('QDockWidget')
self.setFixedSize(400, 400)
self.dock = QDockWidget('Dockable', self)
self.addDockWidget(Qt.RightDockWidgetArea, self.dock)
# 设置dock为可以停靠到左侧、右侧位置
self.dock.setAllowedAreas(Qt.LeftDockWidgetArea | Qt.RightDockWidgetArea)
dock_widget = QWidget()
layout = QVBoxLayout(dock_widget)
list_widget = QListWidget()
layout.addWidget(list_widget)
text_edit = QTextEdit()
layout.addWidget(text_edit)
push_btn = QPushButton('Click Me')
push_btn.clicked.connect(self.btn_clicked) # 连接信号与槽函数
layout.addWidget(push_btn)
self.dock.setWidget(dock_widget)
central_widget = QTextEdit()
self.setCentralWidget(central_widget)
def btn_clicked(self):
print('Button Clicked')
在QDockWidget中添加一个QPushButton,当点击按钮时,在控制台中输出“Button Clicked”。
示例二:在QDockWidget中添加一个CheckBox
class MyApp(QMainWindow):
def __init__(self):
super().__init__()
self.init_ui()
def init_ui(self):
self.setWindowTitle('QDockWidget')
self.setFixedSize(400, 400)
self.dock = QDockWidget('Dockable', self)
self.addDockWidget(Qt.RightDockWidgetArea, self.dock)
# 设置dock为可以停靠到左侧、右侧位置
self.dock.setAllowedAreas(Qt.LeftDockWidgetArea | Qt.RightDockWidgetArea)
dock_widget = QWidget()
layout = QVBoxLayout(dock_widget)
list_widget = QListWidget()
layout.addWidget(list_widget)
text_edit = QTextEdit()
layout.addWidget(text_edit)
check_box = QCheckBox('Check Me')
check_box.stateChanged.connect(self.check_box_changed) # 连接信号与槽函数
layout.addWidget(check_box)
self.dock.setWidget(dock_widget)
central_widget = QTextEdit()
self.setCentralWidget(central_widget)
def check_box_changed(self, state):
print(f'Checkbox State: {state}')
在QDockWidget中添加一个QCheckBox,当改变复选框状态时,在控制台中输出状态。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:PyQt5 QDockWidget – 在它里面设置多个widget - Python技术站