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获取当前时间的方法
Jan 14 Python
Python配置文件解析模块ConfigParser使用实例
Apr 13 Python
Python3 利用requests 库进行post携带账号密码请求数据的方法
Oct 26 Python
Python使用reportlab模块生成PDF格式的文档
Mar 11 Python
python 设置输出图像的像素大小方法
Jul 04 Python
关于django 1.10 CSRF验证失败的解决方法
Aug 31 Python
Python tkinter 下拉日历控件代码
Mar 04 Python
不到20行实现Python代码即可制作精美证件照
Apr 24 Python
使用Dajngo 通过代码添加xadmin用户和权限(组)
Jul 03 Python
Python使用lambda抛出异常实现方法解析
Aug 20 Python
python 批量将中文名转换为拼音
Feb 07 Python
详细介绍python类及类的用法
May 31 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
探讨:如何使用PhpDocumentor生成文档
2013/06/25 PHP
PHP在线打包下载功能示例
2016/10/15 PHP
用js实现的模拟jquery的animate自定义动画(2.5K)
2010/07/20 Javascript
js时间戳格式化成日期格式的多种方法
2013/11/11 Javascript
javascript操作html控件实例(javascript添加html)
2013/12/02 Javascript
JS利用cookie记忆当前位置的防刷新导航效果
2015/10/15 Javascript
jQuery实现简单的DIV拖动效果
2016/02/19 Javascript
JavaScript中将数组进行合并的基本方法讲解
2016/03/07 Javascript
react-redux中connect的装饰器用法@connect详解
2018/01/13 Javascript
Vue中使用vee-validate表单验证的方法
2018/05/09 Javascript
vue+express 构建后台管理系统的示例代码
2018/07/19 Javascript
JS动画实现回调地狱promise的实例代码详解
2018/11/08 Javascript
优雅的在React项目中使用Redux的方法
2018/11/10 Javascript
详解ES6 Fetch API HTTP请求实用指南
2018/11/14 Javascript
JavaScript"模拟事件"的注意要点详解
2019/02/13 Javascript
vue与bootstrap实现简单用户信息添加删除功能
2019/02/15 Javascript
Vue 递归多级菜单的实例代码
2019/05/05 Javascript
javascript触发模拟鼠标点击事件
2019/06/26 Javascript
JavaScript中BOM对象原理与用法分析
2019/07/09 Javascript
vue element-ui table组件动态生成表头和数据并修改单元格格式 父子组件通信
2019/08/15 Javascript
JS如何寻找数组中心索引过程解析
2020/06/01 Javascript
[52:29]DOTA2上海特级锦标赛主赛事日 - 2 胜者组第一轮#3Secret VS OG第三局
2016/03/03 DOTA
Python入门及进阶笔记 Python 内置函数小结
2014/08/09 Python
python下10个简单实例代码
2017/11/15 Python
python射线法判断检测点是否位于区域外接矩形内
2019/06/28 Python
python操作docx写入内容,并控制文本的字体颜色
2020/02/13 Python
一款纯css3实现简单的checkbox复选框和radio单选框
2014/11/05 HTML / CSS
荷兰网上鞋店:Ziengs.nl
2017/01/02 全球购物
神话般的珠宝:Ross-Simons
2020/07/13 全球购物
linux面试题参考答案(7)
2012/10/29 面试题
Java程序员面试90题
2013/10/19 面试题
趣味运动会开幕词
2015/01/28 职场文书
小学见习报告
2015/06/23 职场文书
学习心得体会
2019/06/20 职场文书
golang语言指针操作
2022/04/14 Golang
MySQL存储过程及语法详解
2022/08/05 MySQL