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 encode和decode的妙用
Sep 02 Python
Python基于递归算法实现的走迷宫问题
Aug 04 Python
对numpy中shape的深入理解
Jun 15 Python
浅谈利用numpy对矩阵进行归一化处理的方法
Jul 11 Python
Pandas的read_csv函数参数分析详解
Jul 02 Python
python pycharm的安装及其使用
Oct 11 Python
Tensorflow的梯度异步更新示例
Jan 23 Python
python实现交并比IOU教程
Apr 16 Python
Numpy一维线性插值函数的用法
Apr 22 Python
Python是什么 Python的用处
May 26 Python
Python urllib3软件包的使用说明
Nov 18 Python
python 批量下载bilibili视频的gui程序
Nov 20 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
摩卡咖啡
2021/03/03 咖啡文化
利用PHP动态生成VRML网页
2006/10/09 PHP
php生成随机密码自定义函数代码(简单快速)
2014/05/10 PHP
PHP积分兑换接口实例
2015/02/09 PHP
php将日期格式转换成xx天前的格式
2015/04/16 PHP
PHP的Socket网络编程入门指引
2015/08/11 PHP
Symfony2创建页面实例详解
2016/03/18 PHP
php闭包中使用use声明变量的作用域实例分析
2018/08/09 PHP
学习JavaScript的最佳方法分享
2011/10/21 Javascript
jQuery插件开发基础简单介绍
2013/01/07 Javascript
jquery制作 随机弹跳的小球特效
2015/02/01 Javascript
JavaScript通过setTimeout实时显示当前时间的方法
2015/04/16 Javascript
灵活的理解JavaScript中的this指向
2016/02/25 Javascript
JavaScript隐式类型转换
2016/03/15 Javascript
3种不同的ContextMenu右键菜单实现代码
2016/11/03 Javascript
Angular设置别名alias的方法
2018/11/08 Javascript
js实现自定义右键菜单
2020/05/18 Javascript
Python 流程控制实例代码
2009/09/25 Python
在Python中定义和使用抽象类的方法
2016/06/30 Python
asyncio 的 coroutine对象 与 Future对象使用指南
2016/09/11 Python
python获取当前运行函数名称的方法实例代码
2017/04/06 Python
Python实现的快速排序算法详解
2017/08/01 Python
python使用socket创建tcp服务器和客户端
2018/04/12 Python
python读取文本中的坐标方法
2018/10/14 Python
django中SMTP发送邮件配置详解
2019/07/19 Python
python getpass实现密文实例详解
2019/09/24 Python
python实现超市商品销售管理系统
2019/11/22 Python
如何清空python的变量
2020/07/05 Python
python中pop()函数的语法与实例
2020/12/01 Python
网页中的电话号码如何实现一键直呼效果_附示例
2016/03/15 HTML / CSS
个人简历自我鉴定
2013/10/11 职场文书
小学教师师德反思
2014/02/03 职场文书
2014年旅游局法制宣传日活动总结
2014/11/01 职场文书
学校元旦晚会开场白
2014/12/14 职场文书
大学学习委员竞选稿
2015/11/20 职场文书
详解如何用Python实现感知器算法
2021/06/18 Python