PyQt5学习记录(5)---QDockWidget和QListWidget的基础综合使用

简介

本文介绍什么是QDockWidget以及它使用,顺便介绍一个和QListWidget综合使用的demo.

QDockWidget

QDockWidget是软件交互中一种常见的样式,如下图所示:

上图中的VCS Operations这个框就可以认为是一个DockWidget,最大的特点是可以移动。并且可以镶嵌到主窗口里。当你的软件需要有这样一个控件,可以悬浮,并且不影响不占用主界面空间,类似于全局导航,则最适宜用DockWidget了。下面先上源码:

import sys

from PyQt5.QtWidgets import QApplication, QMainWindow, QTextEdit, QDockWidget, QListWidget
from PyQt5.QtCore import Qt


class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.items = ['呵呵', 'aa', 'bb', 'cc', 'dd', 'ee', 'ff','g', 'h', 'i', 'j', 'k', 'l', 'm'
                 ,'m','n','o','p','q','r','s','t']
        self.init()
        self.addDock()


    def init(self):
        self.text = QTextEdit('主窗口')
        self.text.setAlignment(Qt.AlignCenter)
        self.setCentralWidget(self.text)

        self.setGeometry(200, 200, 800, 400)
        self.setWindowTitle('QDockWidget示例')
        self.show()
        pass

    def onDockListIndexChanged(self, index):
        item = self.items[index]
        self.text.setText(item)
        pass

    def addDock(self):
        dock1 = QDockWidget('DockWidget')
        dock1.setFeatures(QDockWidget.DockWidgetFloatable)
        dock1.setAllowedAreas(Qt.LeftDockWidgetArea)
        listwidget = QListWidget()

        listwidget.addItems(self.items)
        listwidget.currentRowChanged.connect(self.onDockListIndexChanged)
        dock1.setWidget(listwidget)
        self.addDockWidget(Qt.LeftDockWidgetArea, dock1)


def main():
    app = QApplication(sys.argv)
    window = MainWindow()
    sys.exit(app.exec_())


# 入口
if __name__ == '__main__':
    main()

源码要点

  1. QDockWidget并不占用主布局的Layout,只需要依附QMainWindow就可以了。在QMainWindow里直接调用addDockWidget()就可以完成添加。
  2. 使用时先创建一个QDockWidget,传进去的就是DockWidget的title。然后调用setFeatures()函数设置这个DockWidget的属性.
    当设置为QDockWidget.DockWidgetFloatable时,双击时就可浮动出来,并可以移动到任何地方,如下图:

    当双击DockWidget的边框时,就能悬浮出来,如下图所示:

    如果设置DockWidgetClosable则如下所示(左上角有个x号可以关闭):

    其他属性就不介绍了,可以自己运行看到效果,所有的属性如下所示:
    AllDockWidgetFeatures = 7
    DockWidgetClosable = 1
    DockWidgetFloatable = 4
    DockWidgetMovable = 2
    DockWidgetVerticalTitleBar = 8
    NoDockWidgetFeatures = 0

之后调用setAllowedAreas()设置这个DockWidget可以在主页面的什么位置,上下左右都可以。
3. 然后调用setWidget()将自己要显示在DockWidget里的内容设进去。最后通过QMainWindow的addDockWidget()添加进去,其中第一个参数是DockWIdget的初始位置。
4. 我们这里新建了一个QListWidget,然后调用listwidget.currentRowChanged.connect(self.onDockListIndexChanged)将list的点击信号传给自定义的函数,函数默认传的是List的索引。当然也可以调用currentTextChanged这个信号,这样传出去的就是一个String。

--------------------- 本文来自 yanzi1225627 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/yanzi1225627/article/details/76718359?utm_source=copy

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值