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 17 Python
Python实现网络端口转发和重定向的方法
Sep 19 Python
windows系统下Python环境的搭建(Aptana Studio)
Mar 06 Python
Python之str操作方法(详解)
Jun 19 Python
Python中实现变量赋值传递时的引用和拷贝方法
Apr 29 Python
详解python Todo清单实战
Nov 01 Python
详解Python:面向对象编程
Apr 10 Python
django框架防止XSS注入的方法分析
Jun 21 Python
安装完Python包然后找不到模块的解决步骤
Feb 13 Python
python如何提取英语pdf内容并翻译
Mar 03 Python
Django中session进行权限管理的使用
Jul 09 Python
宝塔更新Python及Flask项目的部署
Apr 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
德生PL990的分析评价
2021/03/02 无线电
攻克CakePHP系列一 连接MySQL数据库
2008/10/22 PHP
smarty模板引擎从配置文件中获取数据的方法
2015/01/22 PHP
ThinkPHP项目分组配置方法分析
2016/03/23 PHP
IE 当eval遇上function的处理
2011/08/09 Javascript
jQuery.extend 函数详解
2012/02/03 Javascript
jquery中子元素和后代元素的区别示例介绍
2014/04/02 Javascript
javascript继承机制实例详解
2014/11/20 Javascript
详解Javascript动态操作CSS
2014/12/08 Javascript
js中对函数设置默认参数值的3种方法
2015/10/23 Javascript
以Python代码实例展示kNN算法的实际运用
2015/10/26 Javascript
JavaScript知识点总结(五)之Javascript中两个等于号(==)和三个等于号(===)的区别
2016/05/31 Javascript
微信小程序 页面跳转传参详解
2016/10/28 Javascript
angular-cli修改端口号【angular2】
2017/04/19 Javascript
解决Vue 项目打包后favicon无法正常显示的问题
2018/09/01 Javascript
Element输入框带历史查询记录的实现示例
2019/01/15 Javascript
微信小程序如何刷新当前界面的实现方法
2019/06/07 Javascript
解决removeEventListener 无法清除监听的问题
2020/10/30 Javascript
[00:32]2016完美“圣”典风云人物:Maybe宣传片
2016/12/05 DOTA
30分钟搭建Python的Flask框架并在上面编写第一个应用
2015/03/30 Python
Python实现通讯录功能
2018/02/22 Python
Python可变参数*args和**kwargs用法实例小结
2018/04/27 Python
python pygame实现五子棋小游戏
2020/10/26 Python
python 正则表达式贪婪模式与非贪婪模式原理、用法实例分析
2019/10/14 Python
Python *args和**kwargs用法实例解析
2020/03/02 Python
ipython jupyter notebook中显示图像和数学公式实例
2020/04/15 Python
pytorch 移动端部署之helloworld的使用
2020/10/30 Python
是否有自动比较结构的方法
2015/06/03 面试题
介绍一下write命令
2014/08/10 面试题
培训主管的岗位职责
2013/11/23 职场文书
建筑工程专业学生的自我评价
2013/12/25 职场文书
岗位廉洁从政承诺书
2014/03/27 职场文书
公司优秀员工推荐信
2015/03/24 职场文书
导游词之崇武古城
2019/10/07 职场文书
利用Python读取微信朋友圈的多种方法总结
2021/08/23 Python
利用 JavaScript 构建命令行应用
2021/11/17 Javascript