PyQt5 QDockWidget控件应用详解


Posted in Python onAugust 12, 2020

前言

QDockWidget是一个可以停靠在QMainWindow内的窗口控件,它可以保持在浮动状态或者在指定位置作为子窗口附加到主窗口中,QMainWindow类的主窗口对象保留有一个用于停靠窗口的区域,这个区域在控件的中央周围

QDoCKWidget类中的常用方法

方法 描述
setWidget() 在Dock窗口区域设置QWidget
setFloating() 设置Dock窗口是否可以浮动,如果设置为True,则表示可以浮动
setAlllowedAreas() 设置窗口可以停靠的区域
LeftDockWidgetArea:左侧停靠区域
RightDockWidgetArea:右侧停靠区域
TopDockWidgetArea:顶部停靠区域
BottomDockWidgetArea:底部停靠区域
NoDockWidgetArea:不显示Widget
setFearures() 设置停靠窗口的功能属性
DockWidgetClosable:可关闭
DockWidgetMovable:可移动
DockWidgetFloatable:可漂浮
DockWidgetVerticalTitleBar:在左边显示垂直的标签栏
AllDockWidgetFeatures:具有前三种属性的所有功能
NoDockWidgetFeatures:无法关闭,不能悬浮,不能移动

实例:QDockWidget的使用

import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *

class DockDemo(QMainWindow):
  def __init__(self,parent=None):
    super(DockDemo, self).__init__(parent)
    #设置水平布局
    layout=QHBoxLayout()
    #实例化菜单栏
    bar=self.menuBar()
    #创建主菜单file,在其中添加子菜单
    file=bar.addMenu('File')
    file.addAction('New')
    file.addAction('Save')
    file.addAction('quit')

    #创建QDockWidget窗口(标题,自身窗口)
    self.items=QDockWidget('Dockable',self)

    #实例化列表窗口,添加几个条目
    self.listWidget=QListWidget()
    self.listWidget.addItem('Item1')
    self.listWidget.addItem('Item2')
    self.listWidget.addItem('Item3')
    self.listWidget.addItem('Item4')

    #在窗口区域设置QWidget,添加列表控件
    self.items.setWidget(self.listWidget)

    #设置dock窗口是否可以浮动,True,运行浮动在外面,自动与主界面脱离,False,默认浮动主窗口内,可以手动脱离
    self.items.setFloating(False)

    #设置QTextEdit为中央小控件
    self.setCentralWidget(QTextEdit())
    #将窗口放置在中央小控件的右侧
    self.addDockWidget(Qt.RightDockWidgetArea,self.items)

    self.setLayout(layout)
    self.setWindowTitle('Dock 例子')
if __name__ == '__main__':
  app=QApplication(sys.argv)
  demo=DockDemo()
  demo.show()
  sys.exit(app.exec_())

不重写QDockWidget类 

import sys
from PyQt5.QtCore import *
from PyQt5.QtWidgets import QMainWindow, QTextEdit, QDockWidget, QPushButton, QApplication


class DockDemo(QMainWindow):
  def __init__(self):
    super().__init__()
    self.docker1=QDockWidget('Docker1', self)
    self.docker2=QDockWidget('Docker2', self)
    self.textEdit=QTextEdit()
    self.setCentralWidget(self.textEdit)
    self.btn1=QPushButton('btn1')
    self.btn2=QPushButton('btn2')
    self.btn1.clicked.connect(self.btn1fun)
    self.btn2.clicked.connect(self.btn2fun)
    self.docker1.setWidget(self.btn1)
    self.docker2.setWidget(self.btn2)
    self.addDockWidget(Qt.RightDockWidgetArea,self.docker1)
    self.addDockWidget(Qt.LeftDockWidgetArea, self.docker2)
    self.setWindowTitle('Dock 例子')
    self.resize(400, 300)
  def btn1fun(self):
    self.textEdit.setText('btn1')
    self.docker2.setFloating(True)#开启悬浮状态
  def btn2fun(self):
    self.textEdit.setText('btn2')
    self.docker1.setFloating(True)
    
if __name__ == '__main__':
  app=QApplication(sys.argv)
  demo=DockDemo()
  demo.show()
  sys.exit(app.exec_())

效果: 

PyQt5 QDockWidget控件应用详解

重写QDockWidget类

import sys
from PyQt5.QtCore import *
from PyQt5.QtWidgets import QMainWindow, QTextEdit, QDockWidget, QPushButton, QApplication, QWidget, QVBoxLayout


class docker(QDockWidget):
  def __init__(self, parent):
    super().__init__(parent)
    self.btn1 = QPushButton('btn1')
    self.btn2 = QPushButton('btn2')
    self.vbox = QVBoxLayout()
    self.vbox.addWidget(self.btn1)
    self.vbox.addWidget(self.btn2)
    self.wgt = QWidget()
    self.wgt.setLayout(self.vbox)
    self.setWidget(self.wgt)

class DockDemo(QMainWindow):
  def __init__(self):
    super().__init__()
    self.docker = docker(self)
    self.textEdit = QTextEdit()
    self.setCentralWidget(self.textEdit)
    self.docker.btn1.clicked.connect(self.btn1fun)
    self.docker.btn2.clicked.connect(self.btn2fun)
    self.addDockWidget(Qt.RightDockWidgetArea, self.docker)
    self.setWindowTitle('Dock 例子')
    self.resize(400, 300)

  def btn1fun(self):
    self.textEdit.setText('btn1')

  def btn2fun(self):
    self.textEdit.setText('btn2')


if __name__ == '__main__':
  app = QApplication(sys.argv)
  demo = DockDemo()
  demo.show()
  sys.exit(app.exec_())

效果:

PyQt5 QDockWidget控件应用详解

到此这篇关于PyQt5 QDockWidget控件应用详解的文章就介绍到这了,更多相关PyQt5 QDockWidget内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python splitlines使用技巧
Sep 06 Python
python中pass语句用法实例分析
Apr 30 Python
CentOS7下python3.7.0安装教程
Jul 30 Python
python+opencv 读取文件夹下的所有图像并批量保存ROI的方法
Jan 10 Python
在PyCharm中批量查找及替换的方法
Jan 20 Python
浅谈pandas筛选出表中满足另一个表所有条件的数据方法
Feb 08 Python
Python开发网站目录扫描器的实现
Feb 21 Python
python实现在函数图像上添加文字和标注的方法
Jul 08 Python
python getpass模块用法及实例详解
Oct 07 Python
python 循环数据赋值实例
Dec 02 Python
PyCharm 专业版安装图文教程
Feb 20 Python
python实现移动木板小游戏
Oct 09 Python
pyqt5 textEdit、lineEdit操作的示例代码
Aug 12 #Python
基于python requests selenium爬取excel vba过程解析
Aug 12 #Python
PyCharm+PyQt5+QtDesigner配置详解
Aug 12 #Python
Python自动发送和收取邮件的方法
Aug 12 #Python
Selenium webdriver添加cookie实现过程详解
Aug 12 #Python
Python如何设置指定窗口为前台活动窗口
Aug 12 #Python
Python面向对象实现方法总结
Aug 12 #Python
You might like
PHP新手上路(八)
2006/10/09 PHP
MySQL数据源表结构图示
2008/06/05 PHP
PHP 冒泡排序算法的实现代码
2010/08/08 PHP
php常用ODBC函数集(详细)
2013/06/24 PHP
分割GBK中文遭遇乱码的解决方法
2013/08/09 PHP
PHP实现的自定义图像居中裁剪函数示例【测试可用】
2017/08/11 PHP
jquery tablesorter.js 支持中文表格排序改进
2009/12/09 Javascript
jQuery检测某个元素是否存在代码分享
2015/07/09 Javascript
直接拿来用的页面跳转进度条JS实现
2016/01/06 Javascript
AngularJS 简单应用实例
2016/07/28 Javascript
vue.js中$watch的用法示例
2016/10/04 Javascript
selenium 与 chrome 进行qq登录并发邮件操作实例详解
2017/04/06 Javascript
vue.js分页中单击页码更换页面内容的方法(配合spring springmvc)
2018/02/10 Javascript
JavaScript实现简单的文本逐字打印效果示例
2018/04/12 Javascript
6行代码实现微信小程序页面返回顶部效果
2018/12/28 Javascript
JS div匀速移动动画与变速移动动画代码实例
2019/03/26 Javascript
浅谈一种让小程序支持JSX语法的新思路
2019/06/16 Javascript
JS实现提示框跟随鼠标移动
2019/08/27 Javascript
vue3.0实现点击切换验证码(组件)及校验
2020/11/18 Vue.js
python中while循环语句用法简单实例
2015/05/07 Python
Django接受前端数据的几种方法总结
2016/11/04 Python
Flask框架踩坑之ajax跨域请求实现
2019/02/22 Python
python实现定时压缩指定文件夹发送邮件
2020/12/22 Python
python读取并定位excel数据坐标系详解
2019/06/26 Python
python返回数组的索引实例
2019/11/28 Python
django3.02模板中的超链接配置实例代码
2020/02/04 Python
Python插件机制实现详解
2020/05/04 Python
伦敦高级内衣品牌:Agent Provocateur(大内密探)
2016/08/23 全球购物
Ralph Lauren意大利官方网站:时尚界最负盛名的品牌之一
2018/10/18 全球购物
JMS中Topic和Queue有什么区别
2013/05/15 面试题
个人找工作求职简历的自我评价
2013/10/20 职场文书
安全生产大检查方案
2014/05/07 职场文书
小学优秀教育工作者事迹材料
2014/05/09 职场文书
小学优秀班主任事迹材料
2014/05/17 职场文书
大学生学雷锋活动总结
2014/06/26 职场文书
护士找工作求职信
2014/07/02 职场文书