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正则表达式去掉数字中的逗号(python正则匹配逗号)
Dec 25 Python
linux系统使用python监控apache服务器进程脚本分享
Jan 15 Python
使用python统计文件行数示例分享
Feb 21 Python
Python使用Scrapy爬取妹子图
May 28 Python
利用python爬取散文网的文章实例教程
Jun 18 Python
python利用ffmpeg进行录制屏幕的方法
Jan 10 Python
Flask-WTF表单的使用方法
Jul 12 Python
python plotly绘制直方图实例详解
Jul 22 Python
python OpenCV GrabCut使用实例解析
Nov 11 Python
Python使用pdb调试代码的技巧
May 03 Python
Python的Django框架实现数据库查询(不返回QuerySet的方法)
May 19 Python
详解基于Scrapy的IP代理池搭建
Sep 29 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下intval()和(int)转换使用与区别
2008/07/18 PHP
关于php mvc开发模式的感想
2011/06/28 PHP
PHP函数篇详解十进制、二进制、八进制和十六进制转换函数说明
2011/12/05 PHP
如何利用php array_multisort函数 对数据库结果进行复杂排序
2013/06/08 PHP
PHP防范SQL注入的具体方法详解(测试通过)
2014/05/09 PHP
PHP遍历目录并返回统计目录大小
2014/06/09 PHP
PHP5.3连接Oracle客户端及PDO_OCI模块的安装方法
2016/05/13 PHP
jQuery 位置插件
2008/12/25 Javascript
图片上传即时显示缩略图的js代码
2009/05/27 Javascript
javaScript使用EL表达式的几种方式
2014/05/27 Javascript
基于JavaScript实现通用tab选项卡(通用性强)
2016/01/07 Javascript
JS清除文本框内容离开在恢复及鼠标离开文本框时触发js的方法
2016/01/12 Javascript
Bootstrap和Angularjs配合自制弹框的实例代码
2016/08/24 Javascript
js判断浏览器是否支持严格模式的方法
2016/10/04 Javascript
微信开发 js实现tabs选项卡效果
2016/10/28 Javascript
在iframe中使bootstrap的模态框在父页面弹出问题
2017/08/07 Javascript
ES6解构赋值的功能与用途实例分析
2017/10/31 Javascript
vue.js中引入vuex储存接口数据及调用的详细流程
2017/12/14 Javascript
详解使用vuex进行菜单管理
2017/12/21 Javascript
vue.extend实现alert模态框弹窗组件
2018/04/28 Javascript
微信小程序实现运动步数排行功能(可删除)
2018/07/05 Javascript
vue多页面项目中路由使用history模式的方法
2019/09/23 Javascript
在Python中处理字符串之ljust()方法的使用简介
2015/05/19 Python
python多进程和多线程究竟谁更快(详解)
2017/05/29 Python
python交互式图形编程实例(一)
2017/11/17 Python
pandas修改DataFrame列名的方法
2018/04/08 Python
python3 property装饰器实现原理与用法示例
2019/05/15 Python
关于Pytorch MaxUnpool2d中size操作方式
2020/01/03 Python
如何用Python绘制3D柱形图
2020/09/16 Python
共产党员岗位承诺书
2014/05/29 职场文书
计算机毕业大学生求职信
2014/06/26 职场文书
大学生自我评价200字(4篇)
2014/09/17 职场文书
2014年乡镇妇联工作总结
2014/12/02 职场文书
工作收入证明范本
2015/06/12 职场文书
浅谈Python数学建模之整数规划
2021/06/23 Python
nginx内存池源码解析
2021/11/20 Servers