上期我们一起学习了QDockWidget类。主要涉及到以下几个知识点:

1、QQ秀的呈现

2、QStackedWidget类的使用

今天我们一起来学习下QDockWidget类,这个类能够实现在窗口中放入多个小部件,而且还能移动哦!!

总体介绍

QDockWidget类提供了一个可以停靠在QMainWindow中或作为桌面上的顶级窗口浮动的小部件。

QDockWidget提供了Dock小部件的概念,也称为工具调色板或实用程序窗口。停靠窗口是放置在QMainWindow中的中央窗口小部件周围的停靠窗口小部件区域中的次要窗口。

停靠窗口可以在其当前区域内移动(红线的地方),移动到新区域并且由最终用户确定是否浮动。 QDockWidget API允许程序员限制浮动窗口小部件移动,浮动和关闭的能力以及它们可以放置的区域。

外观

QDockWidget由一个标题栏和内容区域组成。标题栏显示浮动窗口小部件窗口标题,浮动按钮和关闭按钮。根据QDockWidget的状态,float和close按钮可能被禁用或根本不显示。

标题栏和按钮的视觉外观取决于使用的样式。

QDockWidget充当它的子部件的包含,使用setWidget()进行设置。自定义尺寸提示,最小和最大尺寸和尺寸策略应该在子部件中实现。 QDockWidget会尊重他们,调整自己的约束以包含框架和标题。大小限制不应该在QDockWidget本身上设置,因为它们根据是否停靠而改变;停靠的QDockWidget没有框架和更小的标题栏。

下图画圈的地方就是典型的QDockWidget例子,是可以浮动、移动甚至关闭的。

类归属

PyQt5->QtWidgets->QDockWidget

继承关系

PyQt5->QObject and QPaintDevice->QWidget->QDockWidget

更多详细的介绍,请参见官网:

QDockWidget Class​doc.qt.io

小例子

这是一个简单的小例子,在火影动漫中宇智波佐助得到六道仙人的力量馈赠,左眼开启勾玉轮回眼。勾玉轮回眼与轮回写轮眼类似,同时拥有轮回眼和写轮眼的力量。拥有独有忍术天手力和更强的六道之术,并继承了原本写轮眼和万花筒写轮眼的能力,能够使用连六道仙人都惊叹的幻术。经锻炼后能开启空间传送门,其发动的完成体须佐能乎可以抵挡无限月读的光芒,也能和拥有所有尾兽之力的人一起解除无限月读和神·树界降诞(来源:百科百科)。

在下面的例子中没有这么夸张,为了演示方便,没有用复杂的小部件,只是用了QLabel加载图片而已,旨在演示QDockWidget的作用,图片来源于互联网,不喜勿喷。

在上面这个例子中,我们大部分都是通过Qt设计师来实现的,具有以下几个功能:

1、QDockWidget是可以拖动的、悬浮的、甚至是关闭的。

2、写轮眼做了设置,不可以关闭。

3、轮回眼做了设置,即使关了,双击佐助上的轮回眼也能够显示。

4、写轮眼、轮回眼是可以叠加的,变成了QTabWidget,貌似很厉害啊!

如果你对写轮眼、轮回眼、佐助不知道的话,没有关系。写轮眼、轮回眼理解成两个QDockWidget小部件,佐助里面成QMainWindow中的一副图片就行了。

代码解析

使用Qt设计师可以很方便的帮助我们实现上面的功能,拖拽就行了。这里我把用简单的代码讲解一下如何使用QDockWidget。

class Dock(QMainWindow):

def __init__(self):

super().__init__()

hlayout = QHBoxLayout()

self.dock = QDockWidget("我是一个按钮", self)

self.bt = QPushButton("点我")

self.dock.setWidget(self.bt)

self.tt = QTextEdit()

self.setCentralWidget(self.tt)

self.addDockWidget(Qt.RightDockWidgetArea, self.dock)

self.setLayout(hlayout)

self.setWindowTitle("学点编程吧:代码如何使用QDockWidget")

self.bt.clicked.connect(self.game)

def game(self):

self.tt.append("你点我啦!")

效果如下:

self.dock = QDockWidget("我是一个按钮", self)

使用QDockWidget首先要新建一个QDockWidget对象。

self.bt = QPushButton("点我")

self.dock.setWidget(self.bt)

新建一个按钮放在QDockWidget对象上。

self.tt = QTextEdit()

self.setCentralWidget(self.tt)

新建一个QTextEdit小部件设置为主窗口的中央小部件。

self.addDockWidget(Qt.RightDockWidgetArea, self.dock)

将给定的dockwidget添加到指定的区域,这里是中间,对象是self.dock。

说明一下,除了Qt.RightDockWidgetArea,还有其它的,如:

其余的代码就不做说明,因为较为简单。

这个就是一个最简单的例子了。

我们之前所演示的火影忍者那个例子,和这个基本差不多。只是还有几点需要说明一下:

1、写轮眼是无法关闭的。

这个需要单独设置,如下:

self.dockWidget.setFeatures(QDockWidget.DockWidgetMovable)

通过这个设置它只具有移动的功能了。当然除了DockWidgetMovable还有其它的功能,如下:

2、有的时候我们需要QDockWidget就是浮动的,而不是我们把它拉出来,可以这样设置:

self.dockWidget.setFloating(True)

效果如下:

3、轮回眼即使关闭也能够通过点击佐助的显示出来。

self.label_zhuozhu2.installEventFilter(self)

def eventFilter(self, object, event):

if object == self.label_zhuozhu2:

if event.type() == QEvent.MouseButtonDblClick:

self.dockWidget_2.show()

return QMainWindow.eventFilter(self, object, event)

给self.label_zhuozhu2安装事件过滤器,然后重写eventFilter这个函数就行了。相关的知识点,请参见:

学点编程吧:PyQt5系列教程(12):构建我们自己的密码输入框​zhuanlan.zhihu.com

最后

本次的知识点较为简单,详细的内容可以下载源码自己看看。建议可以抽空研究下eric6自动生成的代码,我个人觉得也是可以提高的地方。

好的,今天这期就这样结束吧。如果你喜欢本篇文章,请给我点赞

赞赏(推荐)

分享给你的好友们吧!

关注微信公众号:学点编程吧,发送:pyqt552可以获得本期代码。加油!(ง •̀_•́)ง (*•̀ㅂ•́)

实操中有问题?来讨论吧!学点编程吧-百度贴吧--计算机程序学习的园地!--学点编程吧,让我们的生活更简单,更高效!能用计算机解决的事情,尽量不要让人解决。如果你在学习当中有任何疑问、学习心得、职业发展等内容欢迎在贴吧中分享,让我​tieba.baidu.com

qt 无框dockwidget_PyQt5系列教程(52):QDockWidget的使用相关推荐

  1. 无废话WCF系列教程 -- 李林峰

    李林峰的无废话WCF入门教程 无废话WCF入门教程一[什么是WCF] 无废话WCF入门教程二[WCF应用的通信过程] 无废话WCF入门教程三[WCF的宿主] 无废话WCF入门教程四[WCF的配置文件] ...

  2. 讲给后台程序员看的前端系列教程(52)——Bootstrap轮播图

    C语言自学完备手册(33篇) Android多分辨率适配框架 JavaWeb核心技术系列教程 HTML5前端开发实战系列教程 MySQL数据库实操教程(35篇图文版) 推翻自己和过往--自定义View ...

  3. qt 无框dockwidget_在qt中显示隐藏的dockwidget

    嗨,我创建一个dockwidget,我开始它隐藏.问题是之后我无法显示它,而我可以从isHidden()函数正确地获取状态.奇怪的是,如果我启动dockwidget而不是隐藏,它的工作原理是完美的.我 ...

  4. Hyper-V 2016 系列教程52 常见的虚拟机文件格式介绍

    常见的几种虚拟机文件格式如表5-2所示,表里包含了开放虚拟化通用文件格式.XenServer.VMware.Microsoft三大厂商的自已开发的文件格式.   表5-2                ...

  5. 无废话ExtJs 入门教程六[按钮:Button]

    无废话ExtJs 入门教程六[按钮:Button] extjs技术交流,欢迎加群(201926085) 继上一节内容,我们在表单里加了个两个按钮"提交"与重置.如下所示代码区的第6 ...

  6. 无废话ExtJs 入门教程十七[列表:GridPanel]

    无废话ExtJs 入门教程十七[列表:GridPanel] extjs技术交流,欢迎加群(521711109) 在Extjs中,GridPanel用于数据显示,即我们平时说的列表页.在本节中,我们先对 ...

  7. Qt快速入门系列教程目录

    转载地址:http://www.qter.org/forum.php?mod=viewthread&tid=193 友情提示:欢迎使用新的目录,该目录以后不再更新! 导语        该系列 ...

  8. Qt 快速入门系列教程

            该系列教程是基于QtCreator开发环境的Qt入门级教程.自2009年10月至今的两年多时间里,该系列教程逐渐完善,已经包含了Qt基础.2D绘图.数据库和XML.网络编程.Qt Qu ...

  9. 【C++】C/C++系列教程汇总(更新中......)

    文章目录 01. C语言基础 02. C开发实战 03. 数据结构 04. C++语言基础 05. C++核心编程 06. C++开发实战 07. MFC 08. QT 09. Visual Stud ...

最新文章

  1. 【总结】DIV+CSS有可能遇到的问题
  2. VTK:Math之1DTupleInterpolation
  3. QT的QDesignerWidgetBoxInterface类的使用
  4. linux内存测试工具memtest,linux内存测试工具memtester使用
  5. Unity2017探究Layout布局
  6. AES前端flutter加密与后端java解密pad block corrupted问题
  7. c++ ado连接mysql数据库_c++通过ADO连接数据库
  8. solidity Error:linearization of inherintance graph impossable
  9. 如何在为知笔记(Wiz)和印象笔记(Evernote)之间相互迁移笔记?
  10. Preface Numbering序言页码
  11. 大数据的主要学习内容有哪些?
  12. Linux中断——request_irq
  13. 【通俗易懂】无线通信读书笔记02(自由空间路径损耗、两径模型)
  14. C++编程练习 计算一元二次方程组解判断是否测试过三种情况
  15. 搭积木——pythonOJ笔记
  16. 软件测试学习笔记_第1周第5天——缺陷管理、术语
  17. 信捷总线11轴伺服程序,本人原创,客户设备完美运行,plc程 序框架逻辑很顺畅,梯形图只有逻辑程序,不包含任何运算,运用大量c语言完美简化程序
  18. java 当前时间 转换成 农历(阴历)时间
  19. 2、基于51单片机智能交流电表抄表OLED屏
  20. jquery插件chosen多选时排序问题

热门文章

  1. 摄影/秋日花展(二)
  2. JS实现的类照片墙图片展示栏图片循环播放栏
  3. webview加载百度失败_积攒13年的内容一夜消失,百度贴吧怎么了?
  4. [附源码]java+ssm计算机毕业设计java高校教师工作量的核算的设计与实现g6ipj【源码、数据库、LW、部署】
  5. 8086cpu 可编程接口技术(一)
  6. 这份【互联网项目全流程表】,实在是泰裤辣!!!
  7. Java毕设项目二手交易市场整站源码 校园转转二手市场源码
  8. Resign with develop profile tip
  9. 图像处理网络资源( 转载)
  10. 列表中的导航菜单应用