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中的RSS处理
Apr 13 Python
使用Python实现BT种子和磁力链接的相互转换
Nov 09 Python
python入门教程 python入门神图一张
Mar 05 Python
Python实现的计算马氏距离算法示例
Apr 03 Python
python监控进程脚本
Apr 12 Python
transform python环境快速配置方法
Sep 27 Python
Pyqt5 基本界面组件之inputDialog的使用
Jun 25 Python
微信公众号token验证失败解决方案
Jul 22 Python
Python模拟登录之滑块验证码的破解(实例代码)
Nov 18 Python
在python中logger setlevel没有生效的解决
Feb 21 Python
jupyter notebook 多环境conda kernel配置方式
Apr 10 Python
Python爬取奶茶店数据分析哪家最好喝以及性价比
Sep 23 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 session有效期问题
2009/04/26 PHP
PHP使用Mysql事务实例解析
2014/09/08 PHP
php获取根域名方法汇总
2014/10/28 PHP
PHP7安装Redis扩展教程【Linux与Windows平台】
2016/09/30 PHP
php获取当前url地址的方法小结
2017/01/10 PHP
利用Homestead快速运行一个Laravel项目的方法详解
2017/11/14 PHP
PHP封装请求类实例分析【基于Yii框架】
2019/10/17 PHP
文本加密解密
2006/06/23 Javascript
addEventListener和attachEvent二者绑定的执行函数中的this不相同
2012/12/09 Javascript
javascript生成随机大小写字母的方法
2014/02/20 Javascript
js获取input长度并根据页面宽度设置其大小及居中对齐
2014/08/22 Javascript
javascript日期处理函数,性能优化批处理
2015/09/06 Javascript
jQuery实现拖拽页面元素并将其保存到cookie的方法
2016/06/12 Javascript
浅谈js中的引用和复制(传值和传址)
2016/09/18 Javascript
JS仿JQuery选择器功能
2017/03/08 Javascript
jquery.validate表单验证插件使用详解
2017/06/21 jQuery
node.js通过axios实现网络请求的方法
2018/03/05 Javascript
JS多个表单数据提交下的serialize()应用实例分析
2019/08/27 Javascript
JS可断点续传文件上传实现代码解析
2020/07/30 Javascript
Vue elementui字体图标显示问题解决方案
2020/08/18 Javascript
js实现飞机大战小游戏
2020/08/26 Javascript
react的hooks的用法详解
2020/10/12 Javascript
让你30分钟快速掌握vue3教程
2020/10/26 Javascript
python实现图片筛选程序
2018/10/24 Python
python自动化测试之如何解析excel文件
2019/06/27 Python
Python PyInstaller安装和使用教程详解
2020/01/08 Python
Amaze UI 文件选择域的示例代码
2020/08/26 HTML / CSS
韩国知名的家庭购物网站:CJmall
2016/08/01 全球购物
天美时手表加拿大官网:Timex加拿大
2016/09/01 全球购物
美国学校校服,儿童和婴儿服装:Cookie’s Kids
2016/10/14 全球购物
如何拷贝一整个Java对象,包括它的状态
2013/12/27 面试题
学生发电厂实习自我鉴定
2013/09/22 职场文书
儿科主治医生个人求职信
2013/09/23 职场文书
《夜晚的实验》教学反思
2014/02/19 职场文书
文艺演出主持词
2015/07/01 职场文书
Python编程中内置的NotImplemented类型的用法
2022/03/23 Python