做网站是用什么语言的职业做网站游戏的
- 作者: 五速梦信息网
- 时间: 2026年03月19日 09:53
当前位置: 首页 > news >正文
做网站是用什么语言的,职业做网站游戏的,纯静态网站,搜索引擎优化作业写了个自认为还算不错的类#xff0c;用于简化mousePressEvent、mouseMoveEvent和mouseReleaseEvent中的鼠标信息。 功能有以下几点#xff1a; 鼠标当前状态#xff0c;包括鼠标左/中/右键和单击/双击/抬起鼠标防抖(仅超出一定程度时才判断鼠标发生了移动)#xff0c;灵…写了个自认为还算不错的类用于简化mousePressEvent、mouseMoveEvent和mouseReleaseEvent中的鼠标信息。 功能有以下几点 鼠标当前状态包括鼠标左/中/右键和单击/双击/抬起鼠标防抖(仅超出一定程度时才判断鼠标发生了移动)灵敏度可设置鼠标长按(在鼠标长按并且未发生移动时触发)时长可设置鼠标双击(两次点击的时间间隔足够小时判断为双击)时长可设置鼠标偏移量仅鼠标按下时有效可返回自点击时的总偏移量也可返回与上次鼠标事件之间的相对偏移量 补充 这个自制类在多键按下时会产生歧义也就是没法处理有如刁难一般的操作像是右键拖拽然后左键来添乱之类的。本来是想再重新写份代码以填补这个缺陷的但想想就有点怪什么场合下才需要满足这种怪异的操作。 自制类XJ_MouseStatus #XJ_MouseStatus.py from PyQt5.QtCore import pyqtSignal from PyQt5.QtCore import QPoint,Qt,QObject from PyQt5.QtGui import QMouseEventall[XJ_MouseStatus] class XJ_MouseStatus(QObject):#mousePressEvent、mouseMoveEvent和mouseReleaseEvent特供。只处理单键(多键行为请在外部代码控制)longClickpyqtSignal()#鼠标原地不动长按时触发antiJitter5#防抖当鼠标点击位置与鼠标当前位置的曼哈顿距离不超过该值时仍将鼠标视为不动状态doubleClickInterval500#双击间隔(ms)longPressInterval500#长按间隔(ms)record{lastPress:None,#上一次按下时的信息lastMouse:None,#上一次的鼠标信息currMouse:None,#当前鼠标信息}press[QMouseEvent.MouseButtonRelease,QMouseEvent.MouseButtonPress,QMouseEvent.MouseButtonDblClick]#偷懒用的moveFalse#用于判断是否长按__timerID0#鼠标按下时对应的定时器class __Data:posNone#鼠标位置btnNone#鼠标按键(左中右)pressStatusNone#鼠标当前按下状态(单双击/抬起)timeStampNone#鼠标事件时间刻def init(self,event):self.posevent.globalPos()#这里不用pos是为了防暴毙self.btnevent.button()self.pressStatusevent.MouseButtonReleaseself.timeStampevent.timestamp()def init(self,*arg):super().init(*arg)recordself.record.copy()fakeEventQMouseEvent(QMouseEvent.MouseButtonRelease,QPoint(0,0),Qt.NoButton,Qt.NoButton,Qt.NoModifier)dataself.Data(fakeEvent)data.timeStamp-self.doubleClickInterval#小防避免开局单击时触发双击行为record[lastMouse]datarecord[currMouse]datarecord[lastPress]dataself.recordrecorddef timerEvent(self,event):recordself.recordpressself.presstIdevent.timerId()cIdself.timerIDself.killTimer(event.timerId())if(cIdtId):#当前定时器if(not self.move and record[currMouse].pressStatus!press[0]):#未发生移动未抬起鼠标触发长按信号self.longClick.emit()def Set_DoubleClickInterval(self,interval):#设置双击时间间隔(ms)self.doubleClickIntervalintervaldef Set_LongPressInterval(self,interval):#设置长按时间间隔(ms)self.longPressIntervalintervaldef Set_AntiJitter(self,val):#设置防抖值self.antiJitterval if val0 else 0def Get_Position(self):#返回鼠标坐标。是屏幕坐标(global)需要使用QWidget.mapFromGlobal(QPoint)自行转换为控件相对坐标return self.record[currMouse].posdef Get_PressButtonStatus(self):#返回当前鼠标的键(左中右)以及按下状态(单击/双击/抬起)return self.record[currMouse].btn,self.record[currMouse].pressStatusdef Get_MoveDelta(self,totalTrue,strictTrue):#返回鼠标移动量(仅鼠标按下时有效)为QPoint对象pressself.pressrecordself.recorddata_currrecord[currMouse]if(data_curr.pressStatus!press[0]):#说明鼠标按下if(not strict or self.move):#严格模式下仅判定发生移动时计算移动量p1record[currMouse].posif(total):p2record[lastPress].poselse:p2record[lastMouse].posreturn QPoint(p1.x()-p2.x(),p1.y()-p2.y())return QPoint(0,0)def Get_HasMoved(self):#判断是否发生移动(毕竟用Get_MoveDelta来判断移动的发生是有点麻烦还不如多一个函数return self.movedef Opt_Update(self,event):#更新状态pressself.pressrecordself.recorddata_currself.Data(event)if(event.type()press[1] or event.type()press[2]):#单/双击self.moveFalsedata_oldrecord[lastPress]data_curr.pressStatuspress[1]if(data_old.btndata_curr.btn):#同键位按下if(data_curr.timeStamp-data_old.timeStampself.doubleClickInterval):#在时间间隔内if(data_old.pressStatus!press[2]):#没有双击过data_curr.pressStatuspress[2]#双击record[lastPress]data_currrecord[lastMouse]data_currrecord[currMouse]data_currself.timerIDself.startTimer(self.longPressInterval)else:#移动/抬起data_curr.btnevent.buttons()data_curr.pressStatusrecord[lastMouse].pressStatusif(event.type()press[0]):#抬起if(data_curr.btnQt.NoButton):#确保无按键按下时设置为Releasedata_curr.pressStatuspress[0]data_curr.btnevent.button()else:#移动(QMouseEvent.MouseMove)if(data_curr.pressStatus!press[0] and not self.move):#判断有无发生拖拽deltaself.Get_MoveDelta(strictFalse)if(abs(delta.x())abs(delta.y())self.antiJitter):self.moveTruerecord[currMouse].posrecord[lastPress].posrecord[lastMouse]record[currMouse]record[currMouse]data_curr测试代码与运行结果 与鼠标相关的部分枚举量 单击QMouseEvent.MouseButtonPress双击QMouseEvent.MouseButtonDblClick抬起QMouseEvent.MouseButtonRelease左键Qt.LeftButton中键Qt.MidButton右键Qt.RightButton #Main.py import sys from PyQt5.QtWidgets import QApplication,QWidget from XJ_MouseStatus import *class Test(QWidget):__mouseStatusNonedef init(self,*arg):super().init(*arg)msXJ_MouseStatus()ms.longClick.connect(lambda:print(LongClick!))self.__mouseStatusmsdef EasyPrint(self):press{QMouseEvent.MouseButtonRelease:Release,QMouseEvent.MouseButtonPress:Press,QMouseEvent.MouseButtonDblClick:DblClick,}button{Qt.LeftButton:Left,Qt.MidButton:Middle,Qt.RightButton:Right,}tPointlambda point:(point.x(),point.y())tBtnlambda btn:[button[key] for key in button if keybtn]tBtnStatuslambda status:(tBtn(status[0]),press[status[1]])msself.mouseStatuspostPoint(self.mapFromGlobal(ms.Get_Position()))moveDeltatPoint(ms.Get_MoveDelta())btnStatustBtnStatus(ms.Get_PressButtonStatus())print(fpos{pos},\tdelta{moveDelta},\t{btnStatus[0]}-{btnStatus[1]})if(btnStatus[1]Release):print()def mousePressEvent(self,event):self.mouseStatus.Opt_Update(event)self.EasyPrint()def mouseMoveEvent(self,event):self.mouseStatus.Opt_Update(event)self.EasyPrint()def mouseReleaseEvent(self,event):self.mouseStatus.Opt_Update(event)self.EasyPrint()if namemain:app QApplication(sys.argv)tTest()t.show()sys.exit(app.exec())本文发布于CSDN未经个人允许不得私自转载https://blog.csdn.net/weixin_44733774/article/details/134349820
- 上一篇: 做网站是用什么软件做的大足专业建站公司
- 下一篇: 做网站是用什么语言国内新冠最新消息
相关文章
-
做网站是用什么软件做的大足专业建站公司
做网站是用什么软件做的大足专业建站公司
- 技术栈
- 2026年03月19日
-
做网站是用什么软件互联网挣钱的路子
做网站是用什么软件互联网挣钱的路子
- 技术栈
- 2026年03月19日
-
做网站是什么鬼中国招投标采购网官网
做网站是什么鬼中国招投标采购网官网
- 技术栈
- 2026年03月19日
-
做网站是用什么语言国内新冠最新消息
做网站是用什么语言国内新冠最新消息
- 技术栈
- 2026年03月19日
-
做网站是怎么回事食品网站的建设背景
做网站是怎么回事食品网站的建设背景
- 技术栈
- 2026年03月19日
-
做网站是怎样赚钱的seo软件哪个好
做网站是怎样赚钱的seo软件哪个好
- 技术栈
- 2026年03月19日
