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字符串切片操作知识详解
Mar 28 Python
python代码 if not x: 和 if x is not None: 和 if not x is None:使用介绍
Sep 21 Python
Python PyQt5实现的简易计算器功能示例
Aug 23 Python
python学习之matplotlib绘制散点图实例
Dec 09 Python
Django 跨域请求处理的示例代码
May 02 Python
python连接mongodb密码认证实例
Oct 16 Python
python+ffmpeg批量去视频开头的方法
Jan 09 Python
Django MEDIA的配置及用法详解
Jul 25 Python
关于python pycharm中输出的内容不全的解决办法
Jan 10 Python
Python unittest单元测试openpyxl实现过程解析
May 27 Python
使用tensorflow根据输入更改tensor shape
Jun 23 Python
Python selenium环境搭建实现过程解析
Sep 08 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
东芝TOSHIBA RP-F11电路分析
2021/03/02 无线电
Smarty使用自定义资源的方法
2015/08/08 PHP
PHP实现简易blog的制作
2016/10/24 PHP
PHP7 安装event扩展的实现方法
2019/10/08 PHP
php装饰者模式简单应用案例分析
2019/10/23 PHP
jQuery图片轮播的具体实现
2013/09/11 Javascript
JQuery实现绚丽的横向下拉菜单
2013/12/19 Javascript
JavaScript中的索引数组、关联数组和静态数组、动态数组讲解
2014/11/08 Javascript
如何动态加载外部Javascript文件
2015/12/02 Javascript
使用jQuery中的wrap()函数操作HTML元素的教程
2016/05/24 Javascript
jQuery 限制输入字符串长度
2016/06/20 Javascript
jQuery复制节点用法示例(clone方法)
2016/09/08 Javascript
jQuery下拉菜单的实现代码
2016/11/03 Javascript
微信小程序 五星评分(包括半颗星评分)实例代码
2016/12/14 Javascript
jQuery中弹出iframe内嵌页面元素到父页面并全屏化的实例代码
2016/12/27 Javascript
jQuery基于事件控制实现点击显示内容下拉效果
2017/03/07 Javascript
使用JavaScript根据图片获取条形码的方法
2017/07/04 Javascript
彻底解决 webpack 打包文件体积过大问题
2017/07/07 Javascript
javascript将json格式数组下载为excel表格的方法
2017/12/22 Javascript
Vue核心概念Action的总结
2019/01/18 Javascript
如何检查一个对象是否为空
2019/04/11 Javascript
Javascript和jquery在selenium的使用过程
2019/10/31 jQuery
python获取豆瓣电影简介代码分享
2014/01/16 Python
python更新列表的方法
2015/07/28 Python
python实现简单socket通信的方法
2016/04/19 Python
Python中datetime模块参考手册
2017/01/13 Python
python 简单搭建阻塞式单进程,多进程,多线程服务的实例
2017/11/01 Python
python 对txt中每行内容进行批量替换的方法
2018/07/11 Python
Python之时间和日期使用小结
2019/02/14 Python
基于html5绘制圆形多角图案
2016/04/21 HTML / CSS
AmazeUI 缩略图的实现示例
2020/08/18 HTML / CSS
纽约复古灵感的现代珠宝品牌:Lulu Frost
2018/03/03 全球购物
ddl,dml和dcl的含义
2016/05/08 面试题
家长会主持词开场白
2014/03/18 职场文书
2015年党风建设工作总结
2015/04/29 职场文书
2015年预防青少年违法犯罪工作总结
2015/05/22 职场文书