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 time模块用法实例详解
Sep 11 Python
Windows系统下使用flup搭建Nginx和Python环境的方法
Dec 25 Python
Python中input与raw_input 之间的比较
Aug 20 Python
Python Numpy库安装与基本操作示例
Jan 08 Python
python调用动态链接库的基本过程详解
Jun 19 Python
解决pycharm不能自动补全第三方库的函数和属性问题
Mar 12 Python
python调用私有属性的方法总结
Jul 24 Python
Django实现随机图形验证码的示例
Oct 15 Python
Python基础详解之邮件处理
Apr 28 Python
Python函数中的不定长参数相关知识总结
Jun 24 Python
python数字转对应中文的方法总结
Aug 02 Python
Python实现打乒乓小游戏
Sep 25 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
ThinkPHP登录功能的实现方法
2014/08/20 PHP
php中session与cookie的比较
2015/01/27 PHP
PHP设置进度条的方法
2015/07/08 PHP
PHP自定义递归函数实现数组转JSON功能【支持GBK编码】
2018/07/17 PHP
jQuery 动态酷效果实现总结
2009/12/27 Javascript
JQuery中两个ul标签的li互相移动实现方法
2015/05/18 Javascript
chosen实现省市区三级联动
2018/08/16 Javascript
mpvue写一个CPASS小程序的示例
2018/09/04 Javascript
vue3.0 CLI - 2.3 - 组件 home.vue 中学习指令和绑定
2018/09/14 Javascript
vue进入页面时不在顶部,检测滚动返回顶部按钮问题及解决方法
2019/10/30 Javascript
React实现类似淘宝tab居中切换效果的示例代码
2020/06/02 Javascript
javascript实现前端成语点击验证
2020/06/24 Javascript
微信小程序实现通讯录列表展开收起
2020/11/18 Javascript
Vue仿百度搜索功能
2020/12/28 Vue.js
[01:27:44]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Aster BO3 第一场 1月24日
2021/03/11 DOTA
用Python编写脚本使IE实现代理上网的教程
2015/04/23 Python
Python中的模块导入和读取键盘输入的方法
2015/10/16 Python
Python基于正则表达式实现文件内容替换的方法
2017/08/30 Python
关于Python正则表达式 findall函数问题详解
2018/03/22 Python
详解PyCharm配置Anaconda的艰难心路历程
2018/08/13 Python
详解Python发送email的三种方式
2018/10/18 Python
Python实现微信自动好友验证,自动回复,发送群聊链接方法
2019/02/21 Python
Python实现实时数据采集新型冠状病毒数据实例
2020/02/04 Python
在django项目中导出数据到excel文件并实现下载的功能
2020/03/13 Python
Python爬虫scrapy框架Cookie池(微博Cookie池)的使用
2021/01/13 Python
html5触摸事件判断滑动方向的实现
2018/06/05 HTML / CSS
size?瑞典:英国伦敦的球鞋精品店
2018/03/01 全球购物
异常和异常类的概念
2014/09/12 面试题
售后服务承诺书模板
2014/05/21 职场文书
比赛口号大全
2014/06/10 职场文书
房屋租赁合同补充协议
2014/10/11 职场文书
寒假安全保证书
2015/02/28 职场文书
小学体育组工作总结2015
2015/07/21 职场文书
参加招聘会后的感想
2015/08/10 职场文书
MySQL Server 层四个日志
2022/03/31 MySQL
PostgreSQL并行计算算法及参数强制并行度设置方法
2022/04/07 PostgreSQL