PyQt5实现任意区域用鼠标控制QScrollArea的横向滚动条
一般,使用QScrollArea在滚动区内滚动鼠标,只会触发纵向滚动条。横向滚动条的滚动需要将鼠标移动到横向滚动条上是才会触发。该代码片段通过覆写QScrollArea的滚轮事件,实现在滚动区内任意位置滚动横向滚动条。#!/usr/bin/env python# coding=utf-8# @Time: 2021/9/22 16:06# @Author: 07jiangbin@163.com# @
·
一般,使用QScrollArea在滚动区内滚动鼠标,只会触发纵向滚动条。横向滚动条的滚动需要将鼠标移动到横向滚动条上是才会触发。该代码片段通过覆写QScrollArea的滚轮事件,实现在滚动区内任意位置滚动横向滚动条。
#!/usr/bin/env python
# coding=utf-8
# @Time : 2021/9/22 16:06
# @Author : 07jiangbin@163.com
# @Software: PyCharm
import sys
from PyQt5.Qt import *
from types import MethodType
def scroll_area_wheel_event(self, a0):
"""
在ScrollArea任意区域滚动鼠标,实现横向滚动条滚动。
鼠标滚轮事件,实现横向横向滚动条滚动。
:param self: scrollArea对象
:param a0: 滚动事件
:return:
"""
horizontal_bar = self.horizontalScrollBar()
delta_x = - a0.angleDelta().y() # 鼠标只能纵向滚动
v = horizontal_bar.value() + delta_x
v = max(min(v, horizontal_bar.maximum()), horizontal_bar.minimum()) # 限制横向滚动条的value值。
horizontal_bar.setValue(v) # 设置滚动值
class ScrollWidget(QWidget):
def __init__(self, parent=None):
super(ScrollWidget, self).__init__(parent=parent)
self.scroll = QScrollArea()
self.scroll.wheelEvent = MethodType(scroll_area_wheel_event, self.scroll)
self.widget = QWidget()
self.init_ui()
self.init_style()
def init_ui(self):
layout = QHBoxLayout()
self.scroll.setWidget(self.widget)
layout.addWidget(self.scroll)
self.setLayout(layout)
self.setWindowTitle("ScrollArea实现横向滚动")
def init_style(self):
self.widget.setFixedSize(QSize(1000, 1000))
self.setFixedSize(600, 600)
def main():
app = QApplication(sys.argv)
ex = ScrollWidget()
ex.show()
sys.exit(app.exec_())
if __name__ == "__main__":
main()
更多推荐
已为社区贡献2条内容
所有评论(0)