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实现统计英文单词个数及字符串分割代码
May 28 Python
Python探索之pLSA实现代码
Oct 25 Python
Python实现的字典值比较功能示例
Jan 08 Python
python opencv检测目标颜色的实例讲解
Apr 02 Python
利用python提取wav文件的mfcc方法
Jan 09 Python
对pyqt5之menu和action的使用详解
Jun 20 Python
pandas DataFrame的修改方法(值、列、索引)
Aug 02 Python
python几种常用功能实现代码实例
Dec 25 Python
使用python-Jenkins批量创建及修改jobs操作
May 12 Python
使用PyWeChatSpy自动回复微信拍一拍功能的实现代码
Jul 02 Python
Python之Sklearn使用入门教程
Feb 19 Python
解决python存数据库速度太慢的问题
Apr 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
深入理解PHP中的global
2014/08/19 PHP
百度地图经纬度转换到腾讯地图/Google 对应的经纬度
2015/08/28 PHP
PHP 数组基本操作方法详解
2016/06/17 PHP
PHP中用Trait封装单例模式的实现
2019/12/18 PHP
jQuery 性能优化手册 推荐
2010/02/23 Javascript
javascript中的作用域scope介绍
2010/12/28 Javascript
30个让人兴奋的视差滚动(Parallax Scrolling)效果网站
2012/03/04 Javascript
js 获取屏幕各种宽高的方法(浏览器兼容)
2013/05/15 Javascript
jQuery获取选中内容及设置元素属性的方法
2014/07/09 Javascript
告诉你什么是javascript的回调函数
2014/09/04 Javascript
Jquery+Ajax+PHP+MySQL实现分类列表管理(上)
2015/10/28 Javascript
JS基于ocanvas插件实现的简单画板效果代码(附demo源码下载)
2016/04/05 Javascript
JavaScript 弹出子窗体并返回结果到父窗体的实现代码
2016/05/28 Javascript
jQuery实现简洁的轮播图效果实例
2016/09/07 Javascript
AngularJS 单选框及多选框的双向动态绑定
2017/04/20 Javascript
ES6中Array.includes()函数的用法
2017/09/20 Javascript
详解vue-cli 接口代理配置
2017/12/13 Javascript
vuex实现的简单购物车功能示例
2019/02/13 Javascript
微信小程序实现手势滑动卡片效果
2019/08/26 Javascript
Python抓取电影天堂电影信息的代码
2016/04/07 Python
Python第三方库face_recognition在windows上的安装过程
2019/05/03 Python
Python socket处理client连接过程解析
2020/03/18 Python
python应用Axes3D绘图(批量梯度下降算法)
2020/03/25 Python
Python基于百度AI实现OCR文字识别
2020/04/02 Python
No module named ‘win32gui‘ 的解决方法(踩坑之旅)
2021/02/18 Python
美国高端医师级美容产品电商:BeautifiedYou.com
2017/04/17 全球购物
家乐福台湾线上购物网:Carrefour台湾
2020/09/15 全球购物
化学相关工作求职信
2013/10/02 职场文书
爱心倡议书范文
2014/05/12 职场文书
机电专业毕业生自我鉴定2014
2014/10/04 职场文书
2014年人民警察入党思想汇报
2014/10/12 职场文书
谢师宴家长致辞
2015/07/27 职场文书
公司新员工欢迎词
2015/09/30 职场文书
2016年党员公开承诺书范文
2016/03/24 职场文书
2016年小学党支部创先争优活动总结
2016/04/05 职场文书
SqlServer 垂直分表(减少程序改动)
2021/04/16 SQL Server