本例设置为垂直左侧scroll

主要思想是利用一个长度为0的mid_frame,高度为待设置qwidget的高度,用mid_frame的moveEvent事件驱动qwidget的move

我项目的效果图:

代码及注释

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_()

本例效果:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

时间: 2019-09-22

pyqt5 qscrollarea到达_pyqt5 QScrollArea设置在自定义侧(任何位置)相关推荐

  1. pyqt5 qscrollarea到达_PyQt5如何用QPainter在QScrollArea上画线?

    你应该为重画的控件写一个新类,继承自 QWidget,并重写 paintEvent 方法. 参考 # -*- coding: utf-8 -*- import sys from PyQt5.QtWid ...

  2. R语言plotly可视化:可视化直方图、归一化的直方图、水平直方图、互相重叠的直方图、堆叠的直方图、累积直方图、通过bingroup参数设置多个直方图使用相同的bins设置、自定义直方图条形的间距

    R语言plotly可视化:可视化直方图.归一化的直方图.水平直方图.互相重叠的直方图.堆叠的直方图.累积直方图.通过bingroup参数设置多个直方图使用相同的bins设置.自定义直方图条形的间距 目 ...

  3. echarts pie legend设置 (自定义文本)

    legend: {orient: "vartical",x: "left",top: "center",left: "50%&qu ...

  4. iOS 设置字体 自定义字体

    iOS 设置字体 自定义字体 分类: iOS2012-12-21 16:33 1062人阅读 评论(0) 收藏 举报 1.网上搜索字体文件(后缀名为.ttf,或.odf) 2.把字体库导入到工程的re ...

  5. creo自定义调用零件库_cero基础设置教程,五步cero5.0设置调用自定义标准件的方法...

    cero基础设置教程,五步cero5.0设置调用自定义标准件的方法 cero是现今非常好用的结构设计软件,里面有很多设置方法和技巧,你知道library 里的标准件怎么才能被找到?下面为大家分享cer ...

  6. IntelliJ IDEA - 主题设置或自定义主题

    IntelliJ IDEA - 主题设置 设置主题 自定义主题 提供4主题插件 提供4主题插件下载地址 设置主题 这里默认提供了三套主题:IntelliJ,Darcula,Windows.这里可以根据 ...

  7. android通知栏样式自定义,如何给状态栏上的时钟自定义样式或位置?(位置篇)

    原标题:如何给状态栏上的时钟自定义样式或位置?(位置篇) 时间,是状态栏必不可少的空间之一.至于它的重要性和"电量"."信号"相比,哪个更重要.就由用户自行判断 ...

  8. 当前的安全设置不允许从该位置下载文件 解决方法

    1. 打开浏览器--工具---internet-安全-自定义级别-选择到低到中低. 然后点受信任站点,把你要访问的站点添加进去 2. 设置Internet-->安全-->自定义级别  找到 ...

  9. BannerLayoutSimple 支持图片无限轮播的 BannerLayout,支持自定义小圆点位置以及显示位置等等,反正支持的挺多的,源码也有注释

    BannerLayoutSimple 项目地址: 7449/BannerLayoutSimple 简介:支持图片无限轮播的 BannerLayout,支持自定义小圆点位置以及显示位置等等,反正支持的挺 ...

最新文章

  1. HDU 5996 dingyeye loves stone [阶梯Nim]
  2. urllib.error
  3. Golang关于channel死锁情况的汇总以及解决方案
  4. linux 下挂载光驱
  5. 警告: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property ..
  6. python,错误、调试和测试
  7. FileStream:The process cannot access the file because it is being used by another process
  8. 无法卸载和重装photoshop CS3 的解决办法
  9. Caffe框架的使用
  10. 使用JConsole观察分析Java程序的运行(转)
  11. 如何查看浏览器的DNS 缓存信息
  12. 机器学习梯度消失,梯度爆炸原因
  13. 团队合作开发常用git操作
  14. 1427: 数字转换
  15. 闲鱼平台API,item_app获得闲鱼原生数据
  16. Java实现龟兔赛跑
  17. 移动公网5G配置(一)
  18. 空间数据库Topic推荐-AMiner
  19. 【项目】用户可自定义简易宏键盘
  20. ApplePay对接java后台详细代码

热门文章

  1. java - 求a+aa+aaa+aa...a之和
  2. oracle去重保留一条_关于oracle数据库物理结构(文件)的一些总结
  3. python2.7 pyqt4创建qtapp_python-2.7 – 向TabWidget pyqt4添加加号按钮
  4. python函数手册中文_Python中文手册-Python函数
  5. tomcat 参数最佳实践_一线架构师开发总结:剖析并发编程+JVM性能,深入Tomcat与MySQL...
  6. django与grpc融合的过程
  7. Python测试开发django2.环境部署项目创建
  8. 【Python实战】chinesecalendar模块处理中国股市交易日期
  9. ping 不是内部或外部命令,也不是可运行的程序 或批处理文件。的解决办法
  10. 1.需要对txt存放的测试数据做去重处理,代码如下