[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())
posted @ 2018-09-18 18:18  乐松  阅读(2809)  评论(0编辑  收藏  举报