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中几种操作字符串的方法的介绍
Apr 09 Python
浅谈Python中chr、unichr、ord字符函数之间的对比
Jun 16 Python
详解Python下载图片并保存本地的两种方式
May 15 Python
pyqt5 实现多窗口跳转的方法
Jun 19 Python
python机器学习库scikit-learn:SVR的基本应用
Jun 26 Python
python 实现的发送邮件模板【普通邮件、带附件、带图片邮件】
Jul 06 Python
python 装饰器功能与用法案例详解
Mar 06 Python
Python实现初始化不同的变量类型为空值
Jun 02 Python
Python如何爬取51cto数据并存入MySQL
Aug 25 Python
Python3自带工具2to3.py 转换 Python2.x 代码到Python3的操作
Mar 03 Python
Python列表的索引与切片
Apr 07 Python
python神经网络 tf.name_scope 和 tf.variable_scope 的区别
May 04 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
SONY ICF-SW55的电路分析
2021/03/02 无线电
Laravel框架数据库CURD操作、连贯操作总结
2014/09/03 PHP
基于PHP实现通过照片获取ip地址
2016/04/26 PHP
thinkphp5 加载静态资源路径与常量的方法
2017/12/24 PHP
JavaScript 异步调用框架 (Part 2 - 用例设计)
2009/08/03 Javascript
jQuery阻止冒泡和HTML默认操作
2010/11/17 Javascript
eval的两组性能测试数据
2012/08/17 Javascript
Javascript 按位取反运算符 (~)
2014/02/04 Javascript
JavaScript中匿名、命名函数的性能测试
2014/09/04 Javascript
基于jQuery实现的文字按钮表单特效整理
2014/12/07 Javascript
javascript实现根据3原色制作颜色选择器的方法
2015/07/17 Javascript
jquery.serialize() 函数语法及简单实例
2016/07/08 Javascript
Three.js学习之几何形状
2016/08/01 Javascript
Angular2 (RC4) 路由与导航详解
2016/09/21 Javascript
vue2 如何实现div contenteditable=“true”(类似于v-model)的效果
2017/02/08 Javascript
微信小程序 生命周期函数详解
2017/05/24 Javascript
angularJs的ng-class切换class
2017/06/23 Javascript
微信小程序实现跑马灯效果
2020/10/21 Javascript
Python最基本的输入输出详解
2015/04/25 Python
Python2.x版本中基本的中文编码问题解决
2015/10/12 Python
Python实现识别手写数字 Python图片读入与处理
2020/03/23 Python
使用Python处理BAM的方法
2018/09/28 Python
python实现集中式的病毒扫描功能详解
2019/07/09 Python
python3实现用turtle模块画一棵随机樱花树
2019/11/21 Python
Python中使用gflags实例及原理解析
2019/12/13 Python
Python中logging日志库实例详解
2020/02/19 Python
pycharm远程连接vagrant虚拟机中mariadb数据库
2020/06/05 Python
CSS3绘制有活力的链接下划线
2016/07/14 HTML / CSS
解决html5中video标签无法播放mp4问题的办法
2017/05/07 HTML / CSS
澳大利亚波西米亚风情网上商店:Czarina
2019/03/18 全球购物
个人简历自我评价八例
2013/10/31 职场文书
就业协议书怎么填
2014/04/11 职场文书
敬老模范事迹
2014/05/21 职场文书
阳光体育活动实施方案
2014/05/25 职场文书
2015年度个人业务工作总结
2015/04/27 职场文书
《比尾巴》教学反思
2016/02/24 职场文书