[PyQt]QDockWidget使用介绍
QDockWidget是一个可以停靠在QMainWindow内的窗口控件,它可以保持浮动状态或在指定位置作为子窗口附加到主窗口中。其常用方法有:
setWidget(),用于设置在DockWidget内显示的QWidget及其子类对象。
setFloating(),设置DockWidget是否可以浮动,参数为True或False。
setAllowedArea(),设置可以停靠的区域,可用参数为Qt.DockWidgetAreas{LeftDockWidgetArea, RightDockWidgetArea, TopDockWidgetArea, BottomDockWidgetArea, AllDockWidgetAreas, NoDockWidgetArea}。
setFeatures(),设置停靠窗口的功能属性(有些属性决定了显示哪些按钮),可用参数为QDockWidget.DockWidgetFeatures{DockWidgetClosable, DockWidgetMovable, DockWidgetFloatable, DockWidgetVerticalTitleBar, AllDockWidgetFeatures, NoDockWidgetFeatures}。
其常用信号有:
topLevelChanged(bool topLevel):当浮动状态变化时发生,参数为True时为浮动状态。
void visibilityChanged(bool visible):当显示状态变化时发生(一般是在以Tab方式显示时使用),参数为True时可见。
QMainWindow类中包含了有关DockWidget的一些函数方法,主要有:
addDockWidget(Qt.DockWidgetArea area, QDockWidget dockwidget),将DockWidget添加到主窗口,第一个参数为停靠位置,第二个参数为要添加的DockWidget。
setDockOptions(),设置停靠属性,参数类型为QMainWindow.DockOptions { AnimatedDocks, AllowNestedDocks, AllowTabbedDocks, ForceTabbedDocks, VerticalTabs, GroupedDragging }
setTabPosition(Qt.DockWidgetAreas areas, QTabWidget.TabPosition position),设置停靠和标题位置,第一个参数为停靠位置,第二个参数为标题位置,取值范围QtabWidget.TabPosition { North, South, West, East }。
tabifyDockWidget(QDockWidget first, QDockWidget second),以Tab方式显示DockWidget,其中第二个窗体排在第一个之后。
setTabShape(QTabWidget.TabShape shape),设置Tab标签样式,取值范围QTabWidget.TabShape { Rounded, Triangular }。
#导入Qt相关模块
from PyQt5.QtWidgets import QApplication, QMainWindow, QDockWidget, QTextEdit
from PyQt5.QtCore import Qt
#导入sys模块
import sys
#创建QApplication
app = QApplication(sys.argv)
#创建并设置MainWindow
main = QMainWindow()
main.setWindowTitle("DockWidget示例")
main.setCentralWidget(QTextEdit())
main.resize(640, 480)
#添加菜单
menu = main.menuBar()
file = menu.addMenu("&File")
file.addAction("&New")
file.addAction("&Open")
file.addAction("&Save")
#创建Dock1,利用setStyleSheet更改样式
dock1 = QDockWidget("Dock1")
dock1.setWidget(QTextEdit())
dock1.setStyleSheet(
"""
/*设置边框和图标*/
QDockWidget {
border: 1px solid lightgray;
//titlebar-close-icon: url(close.png);
//titlebar-normal-icon: url(undock.png);
}
/*设置标题栏样式*/
QDockWidget::title {
text-align: left center;
background: lightgray;
padding-left: 5px;
}
/*设置按钮样式*/
QDockWidget::close-button, QDockWidget::float-button {
border: 1px solid transparent;
background: darkgray;
padding: 0px;
}
/*鼠标在其上移动时按钮样式*/
QDockWidget::close-button:hover, QDockWidget::float-button:hover {
background: red;
}
/*按钮按下时样式*/
QDockWidget::close-button:pressed, QDockWidget::float-button:pressed {
padding: 1px -1px -1px 1px;
}
"""
)
#创建Dock2,使用setFeatures函数设置只显示关闭按钮
dock2 = QDockWidget("Dock2")
dock2.setWidget(QTextEdit())
dock2.setFeatures(QDockWidget.DockWidgetClosable)
#创建Dock3,使用setFeatures函数设置竖向标题栏
dock3 = QDockWidget("Dock3", main)
dock3.setWidget(QTextEdit())
dock3.setFeatures(QDockWidget.DockWidgetVerticalTitleBar)
#添加到主窗体
main.addDockWidget(Qt.LeftDockWidgetArea, dock1)
main.addDockWidget(Qt.LeftDockWidgetArea, dock2)
main.addDockWidget(Qt.LeftDockWidgetArea, dock3)
#使用Tab方式显示DockWidgets
main.tabifyDockWidget(dock1, dock2)
main.tabifyDockWidget(dock2, dock3)
#显示主窗体
main.show()
#进入循环,直到主窗体关闭
sys.exit(app.exec())