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在linux中输出带颜色的文字的方法
Jun 19 Python
python的描述符(descriptor)、装饰器(property)造成的一个无限递归问题分享
Jul 09 Python
Python爬虫框架scrapy实现的文件下载功能示例
Aug 04 Python
python使用xlrd和xlwt读写Excel文件的实例代码
Sep 05 Python
pandas通过索引进行排序的示例
Nov 16 Python
python实现图片转字符小工具
Apr 30 Python
django中的数据库迁移的实现
Mar 16 Python
Django {{ MEDIA_URL }}无法显示图片的解决方式
Apr 07 Python
keras实现多GPU或指定GPU的使用介绍
Jun 17 Python
Python中免验证跳转到内容页的实例代码
Oct 23 Python
python字符串拼接+和join的区别详解
Dec 03 Python
Python万能模板案例之matplotlib绘制直方图的基本配置
Apr 13 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小偷的核心程序
2007/04/09 PHP
PHP版QQ互联OAuth示例代码分享
2015/07/05 PHP
php数组函数array_walk用法示例
2016/05/26 PHP
php模拟post上传图片实现代码
2016/06/24 PHP
php计数排序算法的实现代码(附四个实例代码)
2020/03/31 PHP
学习YUI.Ext第五日--做拖放Darg&Drop
2007/03/10 Javascript
JavaScript设计模式之策略模式实例
2014/10/10 Javascript
js生成验证码并直接在前端判断
2015/05/15 Javascript
简单实现异步编程promise模式
2015/07/31 Javascript
JavaScript+CSS实现仿天猫侧边网页菜单效果
2015/08/25 Javascript
jQuery实现带延迟效果的滑动菜单代码
2015/09/02 Javascript
Google 地图API资料整理及详细介绍
2016/08/06 Javascript
Node.js批量给图片加水印的方法
2016/11/15 Javascript
JS实现仿UC浏览器前进后退效果的实例代码
2017/07/17 Javascript
Vue.js2.0中的变化小结
2017/10/24 Javascript
微信小程序wx.request实现后台数据交互功能分析
2017/11/25 Javascript
JS实现的DOM插入节点操作示例
2018/04/04 Javascript
vue 中filter的多种用法
2018/04/26 Javascript
vue项目使用axios发送请求让ajax请求头部携带cookie的方法
2018/09/26 Javascript
微信小程序的线程架构【推荐】
2019/05/14 Javascript
Python类的继承和多态代码详解
2017/12/27 Python
Python中optparser库用法实例详解
2018/01/26 Python
python定时检测无响应进程并重启的实例代码
2019/04/22 Python
Python3网络爬虫中的requests高级用法详解
2019/06/18 Python
用Python将Excel数据导入到SQL Server的例子
2019/08/24 Python
Django项目使用ckeditor详解(不使用admin)
2019/12/17 Python
拿来就用!Python批量合并PDF的示例代码
2020/08/10 Python
Python自动巡检H3C交换机实现过程解析
2020/08/14 Python
Html5 audio标签样式的修改
2016/01/28 HTML / CSS
北美三大旅游网站之一:Travelocity加拿大
2016/08/20 全球购物
台湾SHOPRO购物行家:亚洲首创影视.3C.家电.优质购物平台
2018/05/07 全球购物
法国设计制造的扫帚和刷子:Andrée Jardin
2018/12/06 全球购物
斯洛伐克家具和时尚装饰品购物网站:Butlers.sk
2019/09/08 全球购物
生产副总岗位职责
2013/11/28 职场文书
药店收银员岗位职责
2015/04/07 职场文书
CSS3 制作的书本翻页特效
2021/04/13 HTML / CSS