时间:2021-05-22
本例设置为垂直左侧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_()本例效果:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本文研究的主要是pyqt5自定义信号实例解析的相关内容,具体介绍如下。PyQt5已经自动定义了很多QT内建的信号。但是在实际的使用中为了灵活使用信号与槽机制,我
自定义实现PyQt5下拉复选框ComboCheckBox一、前言由于最近的项目需要具有复选功能,但过多的复选框会影响界面布局和美观,因而想到把PyQt5的下拉列
PyQt5信号与槽高级自定义信号与槽所谓高级自定义信号与槽,指的就是我们可以以自己喜欢的方式定义信号与槽函数,并传递参数,自定义信号的一般流程如下定义信号定义槽
前两天简单认识了一下PyQt5,通过练习开发了一款在Window下自定义关机的小工具,代码如下:importos,sys,timefromPyQt5import
本文实现了PyQt5个各种弹出窗口:输入框、消息框、文件对话框、颜色对话框、字体对话框、自定义对话框其中,为了实现自定义对话框的返回值,使用了信号/槽本文基于w