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 31 Python
深入浅析Python中join 和 split详解(推荐)
Jun 30 Python
Python实现Mysql数据库连接池实例详解
Apr 11 Python
python程序封装为win32服务的方法
Mar 07 Python
详解pandas安装若干异常及解决方案总结
Jan 10 Python
Python3 max()函数基础用法
Feb 19 Python
python连接PostgreSQL过程解析
Feb 09 Python
pycharm 更改创建文件默认路径的操作
Feb 15 Python
详解pandas获取Dataframe元素值的几种方法
Jun 14 Python
如何用python 操作zookeeper
Dec 28 Python
用60行代码实现Python自动抢微信红包
Feb 04 Python
学会用Python实现滑雪小游戏,再也不用去北海道啦
May 20 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 nl2br函数 将换行字符转成 <br>
2009/08/21 PHP
PHP 无限分类三种方式 非函数的递归调用!
2011/08/26 PHP
php实现单链表的实例代码
2013/03/22 PHP
自己写的php curl库实现整站克隆功能
2015/02/12 PHP
PHP判断是否为空的几个函数对比
2015/04/21 PHP
AJAX架构之Dojo篇
2007/04/10 Javascript
javascript function调用时的参数检测常用办法
2010/02/26 Javascript
jQuery中width()方法用法实例
2014/12/24 Javascript
javascript引用类型指针的工作方式
2015/04/13 Javascript
使用AngularJS和PHP的Laravel实现单页评论的方法
2015/06/19 Javascript
基于jQuery实现复选框是否选中进行答题提示
2015/12/10 Javascript
js获取页面及个元素高度、宽度的代码
2016/04/26 Javascript
文本框只能输入数字的js代码(含小数点)
2016/07/10 Javascript
JavaScript中错误正确处理方式小结你用对了吗
2017/10/10 Javascript
Vue 2.0入门基础知识之内部指令详解
2017/10/15 Javascript
js+html5实现手机九宫格密码解锁功能
2018/07/30 Javascript
create-react-app 修改为多入口编译的方法
2018/08/01 Javascript
浅析Angular 实现一个repeat指令的方法
2019/07/21 Javascript
vue fetch中的.then()的正确使用方法
2020/04/17 Javascript
js 压缩图片的示例(只缩小体积,不更改图片尺寸)
2020/10/21 Javascript
Python中为feedparser设置超时时间避免堵塞
2014/09/28 Python
初学Python函数的笔记整理
2015/04/07 Python
Python通过future处理并发问题
2017/10/17 Python
python编写分类决策树的代码
2017/12/21 Python
python 实现识别图片上的数字
2019/07/30 Python
Python使用Paramiko控制liunx第三方库
2020/05/20 Python
Python爬虫之爬取淘女郎照片示例详解
2020/07/28 Python
Python绘制词云图之可视化神器pyecharts的方法
2021/02/23 Python
说一下mysql, oracle等常见数据库的分页实现方案
2012/09/29 面试题
日本语毕业生自荐信
2014/02/01 职场文书
美国探亲签证邀请信
2014/02/05 职场文书
《北大荒的秋天》教学反思
2014/04/14 职场文书
岗位明星事迹材料
2014/05/18 职场文书
婚姻出轨保证书
2015/05/08 职场文书
2015年音乐教学工作总结
2015/07/22 职场文书
《詹天佑》教学反思
2016/02/20 职场文书