PyQt4学习笔记3】QDockWidget
目录
一、创建一个 QDockWidget
二、常见功能
1. 设置停靠区域
2. 设置浮动窗口
3. 禁用关闭按钮
3. 动态创建和管理多个 QDockWidget
4. 事件处理
5. 使用界面设计器
注意事项
三、扩展功能
1. 设置停靠位置
2. 设置浮动
3. 禁止关闭
4. 改变标题
5. 更换内容
6. 设置窗口边框
一、创建一个 QDockWidget
QDockWidget
需要与 QMainWindow
一起使用。以下是一个简单的示例,展示如何创建和使用 QDockWidget
:
import sys
from PyQt4 import QtGui
class DockExample(QtGui.QMainWindow):
def __init__(self):
super(DockExample, self).__init__()
# 创建一个 QDockWidget
self.dock_widget = QtGui.QDockWidget("Dockable", self)
# 创建一个 QLabel 作为 QDockWidget 的内容
self.label = QtGui.QLabel(u"这是 QDockWidget 的内容区域", self.dock_widget)
# 将 QLabel 设置为 QDockWidget 的主控件
self.dock_widget.setWidget(self.label)
# 将 QDockWidget 添加到 QMainWindow 中
self.addDockWidget(QtGui.Qt.LeftDockWidgetArea, self.dock_widget)
# 设置窗口标题和大小
self.setWindowTitle("QDockWidget 示例")
self.resize(800, 600)
if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
window = DockExample()
window.show()
sys.exit(app.exec_())
二、常见功能
1. 设置停靠区域
QDockWidget
可以停靠在 QMainWindow
的边缘,包括顶部、底部、左侧和右侧。可以通过 addDockWidget()
的第二个参数指定停靠位置:
self.addDockWidget(QtGui.Qt.TopDockWidgetArea, self.dock_widget) # 停靠在顶部
self.addDockWidget(QtGui.Qt.BottomDockWidgetArea, self.dock_widget) # 停靠在底部
self.addDockWidget(QtGui.Qt.LeftDockWidgetArea, self.dock_widget) # 停靠在左侧
self.addDockWidget(QtGui.Qt.RightDockWidgetArea, self.dock_widget) # 停靠在右侧
2. 设置浮动窗口
可以通过 setFloating()
方法将 QDockWidget
设置为浮动窗口:
self.dock_widget.setFloating(True) # 设置为浮动窗口
3. 禁用关闭按钮
默认情况下,QDockWidget
会显示一个关闭按钮。可以通过 setFeatures()
方法禁用它:
self.dock_widget.setFeatures(QtGui.QDockWidget.DockWidgetFloatable | QtGui.QDockWidget.DockWidgetMovable)
3. 动态创建和管理多个 QDockWidget
可以动态创建多个 QDockWidget
,并将其添加到主窗口中:
def add_new_dock(self):
new_dock = QtGui.QDockWidget("New Dock", self)
new_label = QtGui.QLabel("这是新的 QDockWidget", new_dock)
new_dock.setWidget(new_label)
self.addDockWidget(QtGui.Qt.RightDockWidgetArea, new_dock)
调用 add_new_dock()
方法即可添加新的 QDockWidget
。
4. 事件处理
QDockWidget
继承自 QWidget
,因此可以对其进行事件处理,例如鼠标点击事件:
def on_dock_clicked(self):
print("QDockWidget 被点击了")
self.dock_widget.clicked.connect(self.on_dock_clicked)
5. 使用界面设计器
如果你使用 PyQt 的界面设计器(如 Qt Designer),也可以直接在设计器中拖放 QDockWidget
,然后生成代码。
注意事项
依赖
QMainWindow
:QDockWidget
必须与QMainWindow
一起使用,无法单独使用。停靠区域管理:
QDockWidget
的停靠区域可以动态调整,用户可以通过拖动将其移动到不同的位置。功能限制:如果需要更复杂的 UI 布局,可能需要结合其他组件(如
QTabWidget
)来实现。
三、扩展功能
1. 设置停靠位置
如果希望 QDockWidget 只能在某个区域停靠,可以使用
setAllowedAreas()
方法。例如:self.dock.setAllowedAreas(QtCore.Qt.TopDockWidgetArea)
2. 设置浮动
如果希望 QDockWidget 初始状态为悬浮的窗口,可以使用
setFloating(True)
:self.dock.setFloating(True)
3. 禁止关闭
如果希望 QDockWidget 不显示关闭按钮,可以使用
setFeatures()
方法:self.dock.setFeatures(QtGui.QDockWidget.DockWidgetFloatable | QtGui.QDockWidget.DockWidgetMovable)
4. 改变标题
可以随时调用
setWindowTitle()
方法来动态修改 QDockWidget 的标题:self.dock.setWindowTitle("新的标题")
5. 更换内容
如果需要动态更换 QDockWidget 中的内容,可以通过
setWidget()
方法重新设置。
6. 设置窗口边框
# 创建停靠窗口
dockWidget = QtGui.QDockWidget("Dock Widget", self)
# 创建一个 QLabel 作为 QDockWidget 的内容
self.label = QtGui.QLabel(u"这是 QDockWidget 的内容区域", dockWidget)
# 设置 QLabel 的背景色
self.label.setStyleSheet("background-color: #4CAF50;")
dockWidget.setWidget(self.label)
dockWidget.setStyleSheet("""
/* 设置QDockWidget导航栏的边框 */
QDockWidget#dockWidget {
background-color: lightblue; /* 设置背景颜色 */
border: 2px solid black; /* 设置边框 */
border-radius: 5px; /* 设置边框圆角 */
}
/* 在停靠和浮动时设置QDockWidget边框 */
QDockWidget > QWidget {
border: 5px solid purple;
}
""")
------------------------END-------------------------
才疏学浅,谬误难免,欢迎各位批评指正。