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的web框架中编写创建日志的程序的教程
Apr 30 Python
详解Python3中yield生成器的用法
Aug 20 Python
关于numpy中np.nonzero()函数用法的详解
Feb 07 Python
python的dataframe转换为多维矩阵的方法
Apr 11 Python
python matplotlib绘图,修改坐标轴刻度为文字的实例
May 25 Python
Python错误处理操作示例
Jul 18 Python
Python3.5内置模块之shelve模块、xml模块、configparser模块、hashlib、hmac模块用法分析
Apr 27 Python
Spring实战之使用util:命名空间简化配置操作示例
Dec 09 Python
Python实现中值滤波去噪方式
Dec 18 Python
PyTorch实现ResNet50、ResNet101和ResNet152示例
Jan 14 Python
TensorFlow 多元函数的极值实例
Feb 10 Python
Jupyter Notebook 远程访问配置详解
Jan 11 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
比特率,大家看看这个就不用收音机音质去比MP3音质了
2021/03/01 无线电
对squid中refresh_pattern的一些理解和建议
2009/04/17 PHP
PHP中创建空文件的代码[file_put_contents vs touch]
2012/01/20 PHP
解析CodeIgniter自定义配置文件
2013/06/18 PHP
js限制checkbox勾选的个数以及php获取多个checkbbox的方法深入解析
2013/07/18 PHP
PHP调用JAVA的WebService简单实例
2014/03/11 PHP
yii2 数据库读写分离配置示例
2017/02/10 PHP
PHP的反射机制实例详解
2017/03/29 PHP
JS控制表格隔行变色
2006/06/26 Javascript
javascript IE中的DOM ready应用技巧
2008/07/23 Javascript
JavaScript 页面编码与浏览器类型判断代码
2010/06/03 Javascript
体验js中splice()的强大(插入、删除或替换数组的元素)
2013/01/16 Javascript
JS常见问题整理(持续更新)
2013/08/06 Javascript
自定义ExtJS控件之下拉树和下拉表格附源码
2013/10/15 Javascript
JavaScript仿flash遮罩动画效果
2016/06/15 Javascript
javascript实现随机生成DIV背景色
2016/06/20 Javascript
jQuery实现根据生日计算年龄 星座 生肖
2016/11/23 Javascript
Angular的模块化(代码分享)
2016/12/26 Javascript
JavaScript基本语法_动力节点Java学院整理
2017/06/26 Javascript
2019 年编写现代 JavaScript 代码的5个小技巧(小结)
2019/01/15 Javascript
Angular之jwt令牌身份验证的实现
2020/02/14 Javascript
通过实例了解Nodejs模块系统及require机制
2020/07/16 NodeJs
解决vue加scoped后就无法修改vant的UI组件的样式问题
2020/09/07 Javascript
vue-axios同时请求多个接口 等所有接口全部加载完成再处理操作
2020/11/09 Javascript
python切片(获取一个子列表(数组))详解
2019/08/09 Python
python rsa实现数据加密和解密、签名加密和验签功能
2019/09/18 Python
python 递归调用返回None的问题及解决方法
2020/03/16 Python
python中time、datetime模块的使用
2020/12/14 Python
使用Html5 Stream开发实时监控系统
2020/06/02 HTML / CSS
卡骆驰德国官方网站:Crocs德国
2019/03/29 全球购物
化工工艺专业求职信
2013/09/22 职场文书
业务经理的岗位职责
2013/11/16 职场文书
房地产项目策划书
2014/02/05 职场文书
2014旅游局党组书记党建工作汇报材料
2014/11/02 职场文书
2015毕业生自我评价范文
2015/03/02 职场文书
Android开发实现极为简单的QQ登录页面
2022/04/24 Java/Android