PyQt5实现让QScrollArea支持鼠标拖动的操作方法

如下所示:

#!/usr/bin/evn python3
# -*- coding: utf-8 -*-

import sys
from PyQt5.QtWidgets import (QApplication, QWidget, QScrollArea, QLabel)
from PyQt5.QtCore import QEvent

class TestWindow(QWidget):
	def __init__(self):
		super(TestWindow, self).__init__()
		self.resize(800, 600)
		self.move(0, 0)
		# self.setMouseTracking(False)
		self.last_time_move = 0
		self.initUI()

	def initUI(self):
		self.central_widget = QWidget(self)

		self.scroll_area = QScrollArea(self)
		self.scroll_area.setGeometry(0, 0, 400, 400)
		self.scroll_area.setWidgetResizable(True)
		self.scroll_bar = self.scroll_area.verticalScrollBar()

		self.scroll_contents = QWidget()
		self.scroll_contents.setGeometry(0, 0, 400, 800)
		self.scroll_contents.setMinimumSize(380, 1000)

		self.label_1 = QLabel(self.scroll_contents)
		self.label_1.move(50, 100)
		self.label_1.setText("HelloRyan")

		self.label_2 = QLabel(self.scroll_contents)
		self.label_2.move(50, 200)
		self.label_2.setText("你好")

		self.label_3 = QLabel(self.scroll_contents)
		self.label_3.move(50, 300)
		self.label_3.setText("-----------")

		self.label_4 = QLabel(self.scroll_contents)
		self.label_4.move(50, 400)
		self.label_4.setText("542543255235432543252")

		self.label_5 = QLabel(self.scroll_contents)
		self.label_5.move(50, 500)
		self.label_5.setText("5432543262542")

		self.label_6 = QLabel(self.scroll_contents)
		self.label_6.move(50, 600)
		self.label_6.setText("4325432532")

		self.scroll_area.setWidget(self.scroll_contents)
		self.scroll_area.installEventFilter(self)

	# def mouseMoveEvent(self, event):
	# 	if event.pos().x() > 0 and event.pos().x() < 400 and event.pos().y() > 0 and event.pos().y() < 400:
	# 		if self.last_time_move == 0:
	# 			self.last_time_move = event.pos().y()
	#
	# 		distance = self.last_time_move - event.pos().y()
	# 		self.scroll_bar.setValue(self.scroll_bar.value() + distance)
	#
	# 		self.last_time_move = event.pos().y()
	# 		print("move%d" % event.pos().y())
	#
	# def mouseReleaseEvent(self, event):
	# 	self.last_time_move = 0
	# 	print("up")

	def eventFilter(self, source, event):
		if event.type() == QEvent.MouseMove:
			print(event.pos().y())

			if self.last_time_move == 0:
				self.last_time_move = event.pos().y()

			distance = self.last_time_move - event.pos().y()
			self.scroll_bar.setValue(self.scroll_bar.value() + distance)
			self.last_time_move = event.pos().y()

		elif event.type() == QEvent.MouseButtonRelease:
			self.last_time_move = 0
		return QWidget.eventFilter(self, source, event)

if __name__ == "__main__":
	app = QApplication(sys.argv)
	test = TestWindow()
	test.show()
	sys.exit(app.exec_())

以上这篇PyQt5实现让QScrollArea支持鼠标拖动的操作方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • 在PYQT5中QscrollArea(滚动条)的使用方法

    如下所示: import sys from PyQt5.QtWidgets import * class MainWindow(QMainWindow): def __init__(self,): super(QMainWindow,self).__init__() self.number = 0 w = QWidget() self.setCentralWidget(w) self.topFiller = QWidget() self.topFiller.setMinimumSize(250,

  • PyQt5实现让QScrollArea支持鼠标拖动的操作方法

    如下所示: #!/usr/bin/evn python3 # -*- coding: utf-8 -*- import sys from PyQt5.QtWidgets import (QApplication, QWidget, QScrollArea, QLabel) from PyQt5.QtCore import QEvent class TestWindow(QWidget): def __init__(self): super(TestWindow, self).__init__()

  • JS实现弹出浮动窗口(支持鼠标拖动和关闭)实例详解

    本文实例讲述了JS实现弹出浮动窗口.分享给大家供大家参考.具体如下: 这里介绍的JS弹出浮动窗口,支持鼠标拖动和关闭,点击链接文字后弹出层窗口,也称作是弹出式对话框吧. 关于一些参数说明: bodycontent:要在窗口中显示的内容 title:窗口的标题 removeable:窗口是否能拖动 注意:内容窗体的高度是height-30px,请计算好要显示的内容高度和宽度. 注:在火狐或chrome下效果最佳,IE8下可能有些小问题. 点击此处查看运行效果: http://demo.jb51.n

  • 支持IE,firefxo,chrome浏览器下鼠标拖动和拖拽的鼠标指针特效

    核心代码: <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>鼠标拖动和拖拽的鼠标指针特效</title> <style> #b

  • 基于css3新属性transform及原生js实现鼠标拖动3d立方体旋转

    通过原生JS,点击事件,鼠标按下.鼠标抬起和鼠标移动事件,实现3d立方体的拖动旋转,并将旋转角度实时的反应至界面上显示. 实现原理:通过获取鼠标点击屏幕时的坐标和鼠标移动时的坐标,来获得鼠标在X轴.Y轴移动的距离,将距离实时赋值给transform属性 从而通过改变transform:rotate属性值来达到3d立方体旋转的效果 HTML代码块: <body> <input type="button" class="open" value=&quo

  • 鼠标拖动改变DIV等网页元素的大小的实现方法

    1.初次实现 1.1 html代码 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>div change

  • 最精简的JavaScript实现鼠标拖动效果的方法

    相对于其它的鼠标拖动效果,这款拖动特效还是比较精简的,而且它还支持鼠标吸附,不按鼠标左键它也可以会跟随鼠标移动:定义时候也相对方便,只用指定被拖动的DIV ID就可以了,扩展性很好. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns=

  • WinForm实现鼠标拖动控件跟随效果

    本文实例为大家分享了WinForm实现鼠标拖动控件跟随效果的具体代码,供大家参考,具体内容如下 1. 运行初始窗口如下: 2. 拖动后效果如下: 3. 代码如下: public partial class Form1 : Form { /* * 理解了下面的几个概念,就能完全明白相对坐标的变化. * MouseEventArgs e 为事件鼠标参数,因此,e.Location 指示了位于事件源上的光标坐标 * Cursor.Position 获取的是相对于用户屏幕的光标坐标 * PointToC

  • vue+mousemove实现鼠标拖动功能(拖动过快失效问题解决方法)

    今天用vue+原生js的mousemove事件,写了个拖动,发现只能慢慢拖动才行,鼠标只要移动快了,就失效,不能拖动了: 搞了半天在,总算解决了,但是问题的深层原理还没搞清楚,知道的大侠可以留言分享,下面直接上代码: 只能慢速拖动的代码: <!DOCTYPE html> <html> <head> <title>vue结合原生js实现拖动</title> <script src="https://cdn.bootcss.com/v

  • 解决IntelliJ IDEA中鼠标拖动选择为矩形区域问题

    修改方法有两个 1.方法1:点"编辑"-->"列选择模式" 2.方法2:快捷键Shift+Alt+Insert 修改后结果如下: 到此这篇关于解决IntelliJ IDEA中鼠标拖动选择为矩形区域问题的文章就介绍到这了,更多相关IDEA鼠标拖动选择矩形区域内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

  • vue+ts实现元素鼠标拖动效果

    本文实例为大家分享了vue+ts实现元素鼠标拖动效果的具体代码,供大家参考,具体内容如下 实现效果 相关使用属性 // clientX 鼠标相对于浏览器左上角x轴的坐标: 不随滚动条滚动而改变: // clientY 鼠标相对于浏览器左上角y轴的坐标: 不随滚动条滚动而改变: // element.offsetTop 指 element距离上方或上层控件的位置,整型,单位像素. // element.offsetLeft 指 element距离左方或上层控件的位置,整型,单位像素. // ele

随机推荐