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实现的一个找零钱的小程序代码分享
Aug 25 Python
Python使用matplotlib绘制动画的方法
May 20 Python
Python生成随机验证码的两种方法
Dec 22 Python
Python书单 不将就
Jul 11 Python
django将图片上传数据库后在前端显式的方法
May 25 Python
python浪漫表白源码
Apr 05 Python
python 公共方法汇总解析
Sep 16 Python
Python3 xml.etree.ElementTree支持的XPath语法详解
Mar 06 Python
python中for in的用法详解
Apr 17 Python
Python新手学习函数默认参数设置
Jun 03 Python
查看keras的默认backend实现方式
Jun 19 Python
利用Python函数实现一个万历表完整示例
Jan 23 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
ThinkPHP实现跨模块调用操作方法概述
2014/06/20 PHP
PHP中ini_set与ini_get用法实例
2014/11/04 PHP
PHP使用Pthread实现的多线程操作实例
2015/11/14 PHP
PHP+Apache实现二级域名之间共享cookie的方法
2019/07/24 PHP
Yii框架 session 数据库存储操作方法示例
2019/11/18 PHP
JavaScript跨域方法汇总
2014/10/16 Javascript
Javascript 多物体运动的实现
2014/12/24 Javascript
分享一个原生的JavaScript拖动方法
2016/09/25 Javascript
基于jQuery和Bootstrap框架实现仿知乎前端动态列表效果
2016/11/09 Javascript
jQuery实现的仿百度,仿谷歌搜索下拉框效果示例
2016/12/30 Javascript
一道面试题引发的对javascript类型转换的思考
2017/03/06 Javascript
使用proxy实现一个更优雅的vue【推荐】
2018/06/19 Javascript
JS实现textarea通过换行或者回车把多行数字分割成数组并且去掉数组中空的值
2018/10/29 Javascript
javascript触发模拟鼠标点击事件
2019/06/26 Javascript
Python 网络编程起步(Socket发送消息)
2008/09/06 Python
python删除文件示例分享
2014/01/28 Python
python3实现UDP协议的服务器和客户端
2017/06/14 Python
django实现同一个ip十分钟内只能注册一次的实例
2017/11/03 Python
一个月入门Python爬虫学习,轻松爬取大规模数据
2018/01/03 Python
Python机器学习之K-Means聚类实现详解
2018/02/22 Python
解决Mac安装scrapy失败的问题
2018/06/13 Python
python语言基本语句用法总结
2019/06/11 Python
python 列表输出重复值以及对应的角标方法
2019/06/11 Python
python3 selenium自动化 下拉框定位的例子
2019/08/23 Python
Python3列表List入门知识附实例
2020/02/09 Python
详解Windows下PyCharm安装Numpy包及无法安装问题解决方案
2020/06/18 Python
详解Html5原生拖拽操作
2018/01/12 HTML / CSS
Nayomi官网:沙特阿拉伯王国睡衣和内衣品牌
2020/12/19 全球购物
本科生职业生涯规划书范文
2014/01/21 职场文书
安全标兵事迹材料
2014/08/17 职场文书
班子四风对照检查材料
2014/08/21 职场文书
家庭困难证明
2014/10/12 职场文书
2015年高中班主任工作总结
2015/04/30 职场文书
一百条裙子读书笔记
2015/07/01 职场文书
优秀党员主要事迹材料
2015/11/04 职场文书
缓存替换策略及应用(以Redis、InnoDB为例)
2021/07/25 Redis