pyqt5 QScrollArea设置在自定义侧(任何位置)


Posted in Python onSeptember 25, 2019

本例设置为垂直左侧scroll

主要思想是利用一个长度为0的mid_frame,高度为待设置qwidget的高度,用mid_frame的moveEvent事件驱动qwidget的move

我项目的效果图:

pyqt5 QScrollArea设置在自定义侧(任何位置)

代码及注释

from PyQt5.Qt import *
from sys import argv


# 主窗口
class Main(QMainWindow):
  def __init__(self):
    super().__init__(None)
    self.setGeometry(500, 500, 500, 500)

    # 实例化
    self.main = MainFrame(self)
    self.scroll = ScrollFrame(self, self.main, 40)

    self.show()

  def resizeEvent(self, e):
    # resize改变scroll窗口的高度使其与自己相同
    self.scroll.resize(self.scroll.width(), self.height())

 #需要配备scroll的窗口
class MainFrame(QFrame):
  def __init__(self, father):
    super().__init__(father)
    self.father = father
    self.setGeometry(50, 50, 100, 1500)
    
    # 测试按钮
    for i in range(15):
      b = QPushButton(str(i), self)
      b.setGeometry(0, i*100, 100, 100)

  # 自定义滚轮事件
  def wheelEvent(self, e):
    if e.angleDelta().y() > 0:
      self.move(self.x(), self.y() + 60)
    else:
      self.move(self.x(), self.y() - 60)
    # 改变scroll的值
    self.father.scroll.bar.setValue(abs(self.y()))

  def resizeEvent(self, e):
    # resize改变mid_frame的高度使其与自己相同
    self.father.scroll.mid_frame.setGeometry(0, 0, 0, self.height())


# 承载scrollarea的窗口
class ScrollFrame(QFrame):
  def __init__(self, father, parent, pos_x):
    super().__init__(father)
    self.parent_, self.father, self.pox_x = parent, father, pos_x

    self.mid_frame = MidFrame(self)
    self.mid_frame.setGeometry(0, 0, 0, self.parent_.height())

    self.scroll = QScrollArea()
    # 实例化verticalbar以供改变scroll的值
    self.bar = self.scroll.verticalScrollBar()
    # 绑定中间窗口
    self.scroll.setWidget(self.mid_frame)
    # 自动隐藏和出现
    self.scroll.setVerticalScrollBarPolicy(Qt.ScrollBarAsNeeded)

    # 加入到承载frame
    layout = QGridLayout(self)
    layout.addWidget(self.scroll, 0, 0)
    self.setLayout(layout)

    # 设置承载fram的size和scrollarea一样
    self.setGeometry(pos_x, 0, 20, self.father.height())

  def resizeEvent(self, e):
    # resize改变scroll的s高度使其与自己一样
    self.scroll.setGeometry(0, 0, 20, self.height())


# 接受scroll事件的中间窗口
class MidFrame(QFrame):
  def __init__(self, father):
    super().__init__(father)
    self.father = father

  def moveEvent(self, e):
    # move事件绑定实际滚动窗口的move
    self.father.parent_.move(self.father.parent_.x(), e.pos().y())


app = QApplication(argv)
main = Main()
app.exec_()

本例效果:

pyqt5 QScrollArea设置在自定义侧(任何位置)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
理解Python中的类与实例
Apr 27 Python
python结合API实现即时天气信息
Jan 19 Python
Python编程之string相关操作实例详解
Jul 22 Python
Python中的探索性数据分析(功能式)
Dec 22 Python
pandas创建新Dataframe并添加多行的实例
Apr 08 Python
python实现批量图片格式转换
Jun 16 Python
Python常见内置高效率函数用法示例
Jul 31 Python
python中类的属性和方法介绍
Nov 27 Python
使用Python创建简单的HTTP服务器的方法步骤
Apr 26 Python
Python从list类型、range()序列简单认识类(class)【可迭代】
May 31 Python
python中用logging实现日志滚动和过期日志删除功能
Aug 20 Python
Python常用库Numpy进行矩阵运算详解
Jul 21 Python
python 用户交互输入input的4种用法详解
Sep 24 #Python
python getpass实现密文实例详解
Sep 24 #Python
使用Python的turtle模块画国旗
Sep 24 #Python
给你一面国旗 教你用python画中国国旗
Sep 24 #Python
Python MongoDB 插入数据时已存在则不执行,不存在则插入的解决方法
Sep 24 #Python
Python获取时间戳代码实例
Sep 24 #Python
Python django框架输入汉字,数字,字符生成二维码实现详解
Sep 24 #Python
You might like
php实现压缩多个CSS与JS文件的方法
2014/11/11 PHP
PHP判断浏览器、判断语言代码分享
2015/03/05 PHP
Session 失效的原因汇总及解决丢失办法
2015/09/30 PHP
PHP实现微信申请退款功能
2018/10/01 PHP
javascript字符串拼接的效率问题
2010/12/25 Javascript
jquery的index方法实现tab效果
2011/02/16 Javascript
再论Javascript下字符串连接的性能
2011/03/05 Javascript
javascript中关于执行环境的杂谈
2011/08/14 Javascript
JavaScript高级程序设计(第3版)学习笔记2 js基础语法
2012/10/11 Javascript
ie8 不支持new Date(2012-11-10)问题的解决方法
2013/07/31 Javascript
JavaScript模拟push
2016/03/06 Javascript
详解Node.js模块间共享数据库连接的方法
2016/05/24 Javascript
javascript-解决mongoose数据查询的异步操作
2016/12/22 Javascript
有关JS中的0,null,undefined,[],{},'''''''',false之间的关系
2017/02/14 Javascript
Webpack性能优化 DLL 用法详解
2017/08/10 Javascript
JavaScript实现三级级联特效
2017/11/05 Javascript
微信小程序实现图片上传、删除和预览功能的方法
2017/12/18 Javascript
浅谈React中的元素、组件、实例和节点
2018/02/27 Javascript
Angular使用cli生成自定义文件、组件的方法
2018/09/04 Javascript
vue-router 控制路由权限的实现
2020/09/24 Javascript
nodejs+express最简易的连接数据库的方法
2020/12/23 NodeJs
python中的随机函数小结
2018/01/27 Python
利用Python yagmail三行代码实现发送邮件
2018/05/11 Python
浅谈python下含中文字符串正则表达式的编码问题
2018/12/07 Python
分享Python切分字符串的一个不错方法
2018/12/14 Python
Python帮你微信头像任意添加装饰别再@微信官方了
2019/09/25 Python
Django QuerySet查询集原理及代码实例
2020/06/13 Python
Python xpath表达式如何实现数据处理
2020/06/13 Python
python如何导入依赖包
2020/07/13 Python
Python接口自动化系列之unittest结合ddt的使用教程详解
2021/02/23 Python
html5移动端自适应布局的实现
2020/04/15 HTML / CSS
越南综合购物网站:Lazada越南
2019/06/10 全球购物
了解AppleShare protocol(AppleShare协议)吗
2015/08/28 面试题
职业教育毕业生求职信
2013/11/09 职场文书
英语专业学生个人求职信
2014/01/28 职场文书
预备党员公开承诺书
2014/05/28 职场文书