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中获取对象信息的方法
Apr 27 Python
浅谈Python中用datetime包进行对时间的一些操作
Jun 23 Python
对python 各种删除文件失败的处理方式分享
Apr 24 Python
python提取图像的名字*.jpg到txt文本的方法
May 10 Python
Python列表解析配合if else的方法
Jun 23 Python
python3+pyqt5+itchat微信定时发送消息的方法
Feb 20 Python
基于Python2、Python3中reload()的不同用法介绍
Aug 12 Python
python word转pdf代码实例
Aug 16 Python
pycharm通过anaconda安装pyqt5的教程
Mar 24 Python
解决django的template中如果无法引用MEDIA_URL问题
Apr 07 Python
python 已知平行四边形三个点,求第四个点的案例
Apr 12 Python
python定义具名元组实例操作
Feb 28 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
?繁体转换的class
2006/10/09 PHP
PHP实现指定字段的多维数组排序函数分享
2015/03/09 PHP
php PDO属性设置与操作方法分析
2018/12/27 PHP
jQuery之选择组件的深入解析
2013/06/19 Javascript
JavaScript中for..in循环陷阱介绍
2013/11/12 Javascript
node.js中的fs.link方法使用说明
2014/12/15 Javascript
js实现点击图片将图片地址复制到粘贴板的方法
2015/02/16 Javascript
WEB前端开发都应知道的jquery小技巧及jquery三个简写
2015/11/15 Javascript
javascript类型系统——日期Date对象全面了解
2016/07/13 Javascript
三种方式实现瀑布流布局
2017/02/10 Javascript
jQuery阻止移动端遮罩层后页面滚动
2017/03/15 Javascript
JS ES6中setTimeout函数的执行上下文示例
2017/04/27 Javascript
集合Bootstrap自定义confirm提示效果
2017/09/19 Javascript
Express进阶之log4js实用入门指南
2018/02/10 Javascript
vue2 全局变量的设置方法
2018/03/09 Javascript
使用vue-cli(vue脚手架)快速搭建项目的方法
2018/05/21 Javascript
nodejs通过钉钉群机器人推送消息的实现代码
2019/05/05 NodeJs
VUEX-action可以修改state吗
2019/11/19 Javascript
vue实现编辑器键盘抬起时内容跟随光标距顶位置向上滚动效果
2020/05/28 Javascript
Threejs实现滴滴官网首页地球动画功能
2020/07/13 Javascript
[55:04]海涛DOTA2死魂复燃6.82版本介绍
2014/09/28 DOTA
基于python实现微信模板消息
2015/12/21 Python
Python回文字符串及回文数字判定功能示例
2018/03/20 Python
详解python中的json和字典dict
2018/06/22 Python
Python图像处理之图片文字识别功能(OCR)
2019/07/30 Python
快速解决pymongo操作mongodb的时区问题
2020/12/05 Python
路政管理求职信
2014/06/18 职场文书
2014年村官工作总结
2014/11/24 职场文书
房屋分割离婚协议书范本
2014/12/01 职场文书
2015年医务人员医德医风自我评价
2015/03/03 职场文书
工作态度检讨书范文
2015/05/06 职场文书
作弊检讨书范文
2015/05/06 职场文书
安娜卡列尼娜观后感
2015/06/11 职场文书
捐款仪式主持词
2015/07/04 职场文书
Nginx开启Brotli压缩算法实现过程详解
2021/03/31 Servers
详细谈谈MYSQL中的COLLATE是什么
2021/06/11 MySQL