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使用urllib2实现发送带cookie的请求
Apr 28 Python
在arcgis使用python脚本进行字段计算时是如何解决中文问题的
Oct 18 Python
利用Celery实现Django博客PV统计功能详解
May 08 Python
python实现的二叉树定义与遍历算法实例
Jun 30 Python
python pcm音频添加头转成Wav格式文件的方法
Jan 09 Python
Django REST framework 分页的实现代码
Jun 19 Python
详解Django定时任务模块设计与实践
Jul 24 Python
python获取依赖包和安装依赖包教程
Feb 13 Python
python程序输出无内容的解决方式
Apr 09 Python
python中查看.db文件中表格的名字及表格中的字段操作
Jul 07 Python
python接口自动化框架实战
Dec 23 Python
matplotlib绘制多子图共享鼠标光标的方法示例
Jan 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
FCKeditor添加自定义按钮
2008/03/27 PHP
如何判断php数组的维度
2013/06/10 PHP
php将字符串随机分割成不同长度数组的方法
2015/06/01 PHP
利用“多说”制作留言板、评论系统
2015/07/14 PHP
php提高网站效率的技巧
2015/09/29 PHP
PHP中抽象类和抽象方法概念与用法分析
2016/05/24 PHP
jQuery的三种$()
2009/12/30 Javascript
基于jquery实现的类似百度搜索的输入框自动完成功能
2011/08/23 Javascript
JavaScript实现简单的时钟实例代码
2013/11/23 Javascript
简介可以自动完成UI的AngularJS工具angular-smarty
2015/06/23 Javascript
jquery实现页面虚拟键盘特效
2015/08/08 Javascript
JS获取子窗口中返回的数据实现方法
2016/05/28 Javascript
Angularjs手动解析表达式($parse)
2016/10/12 Javascript
Ionic3实现图片瀑布流布局
2017/08/09 Javascript
Nodejs实现多文件夹文件同步
2018/10/17 NodeJs
openlayers实现图标拖动获取坐标
2020/09/25 Javascript
python缩进区别分析
2014/02/15 Python
Python multiprocessing.Manager介绍和实例(进程间共享数据)
2014/11/21 Python
Python中用PIL库批量给图片加上序号的教程
2015/05/06 Python
Python如何import文件夹下的文件(实现方法)
2017/01/24 Python
Python解惑之True和False详解
2017/04/24 Python
matplotlib作图添加表格实例代码
2018/01/23 Python
python实现的读取网页并分词功能示例
2019/10/29 Python
OpenCV中VideoCapture类的使用详解
2020/02/14 Python
使用Bazel编译TensorBoard教程
2020/02/15 Python
浅析NumPy 切片和索引
2020/09/02 Python
英国二手物品交易网站:Preloved
2017/10/06 全球购物
澳大利亚领先的时尚内衣零售商:Bras N Things
2020/07/28 全球购物
C,C++的几个面试题小集
2013/07/13 面试题
2014政务公开实施方案
2014/02/19 职场文书
小学综合实践活动总结
2014/07/07 职场文书
2014年物业管理工作总结
2014/11/21 职场文书
2014小学年度工作总结
2014/12/20 职场文书
MySQL分区表实现按月份归类
2021/11/01 MySQL
深入理解 Golang 的字符串
2022/05/04 Golang
在python中读取和写入CSV文件详情
2022/06/28 Python