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爬虫框架Scrapy安装使用步骤
Apr 01 Python
python中MySQLdb模块用法实例
Nov 10 Python
Python and、or以及and-or语法总结
Apr 14 Python
编写Python爬虫抓取暴走漫画上gif图片的实例分享
Apr 20 Python
基于python的图片修复程序(实现水印去除)
Jun 04 Python
python之super的使用小结
Aug 13 Python
python命令行参数用法实例分析
Jun 25 Python
python读写csv文件实例代码
Jul 05 Python
python使用正则来处理各种匹配问题
Dec 22 Python
基于opencv的selenium滑动验证码的实现
Jul 24 Python
Python 如何调试程序崩溃错误
Aug 03 Python
python 使用pandas读取csv文件的方法
Dec 24 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中用正则表达式清除字符串的空白
2011/01/17 PHP
php统计文件大小,以GB、MB、KB、B输出
2011/05/29 PHP
php中时间轴开发(刚刚、5分钟前、昨天10:23等)
2011/10/03 PHP
非常精妙的PHP递归调用与静态变量使用
2012/12/16 PHP
鼠标拖动实现DIV排序示例代码
2013/10/14 Javascript
jQuery实现div浮动层跟随页面滚动效果
2014/02/11 Javascript
javascript为下拉列表动态添加数据项
2014/05/23 Javascript
移动设备web开发首选框架:zeptojs介绍
2015/01/29 Javascript
javascript判断并获取注册表中可信任站点的方法
2015/06/01 Javascript
javascript字符串替换函数如何一次性全部替换掉
2015/10/30 Javascript
全面解析JavaScript的Backbone.js框架中的Router路由
2016/05/05 Javascript
jQuery中设置form表单中action值的实现方法
2016/05/25 Javascript
详解VueJs前后端分离跨域问题
2017/05/24 Javascript
Vue-Router实现组件间跳转的三种方法
2017/11/07 Javascript
vue使用axios时关于this的指向问题详解
2017/12/22 Javascript
小程序使用watch监听数据变化的方法详解
2019/09/20 Javascript
[36:52]DOTA2真视界:基辅特锦赛总决赛
2017/05/21 DOTA
python实现RSA加密(解密)算法
2016/02/17 Python
python实现字典(dict)和字符串(string)的相互转换方法
2017/03/01 Python
Python实现求解一元二次方程的方法示例
2018/06/20 Python
Python使用sort和class实现的多级排序功能示例
2018/08/15 Python
Python开发之Nginx+uWSGI+virtualenv多项目部署教程
2019/05/13 Python
利用Python模拟登录pastebin.com的实现方法
2019/07/12 Python
在python中使用pymysql往mysql数据库中插入(insert)数据实例
2020/03/02 Python
踩坑:pytorch中eval模式下结果远差于train模式介绍
2020/06/23 Python
python上下文管理器异常问题解决方法
2021/02/07 Python
css3简单练习实现遨游浏览器logo的绘制
2013/01/30 HTML / CSS
Steve Madden官网:美国鞋类品牌
2017/01/29 全球购物
英国折扣高尔夫商店:Discount Golf Store
2019/11/19 全球购物
递归计算如下递归函数的值(斐波拉契)
2012/02/04 面试题
售后服务承诺书
2014/03/26 职场文书
档案接收函格式
2015/01/30 职场文书
民主生活会意见
2015/06/05 职场文书
退休教师追悼词
2015/06/23 职场文书
用Python爬虫破解滑动验证码的案例解析
2021/05/06 Python
Python的这些库,你知道多少?
2021/06/09 Python