PyQt5实现仿QQ贴边隐藏功能的实例代码
贴边隐藏思路
可以判断窗口的位置,当与边缘的距离小于某值时,再判断鼠标是否在窗口,判断是否隐藏窗口;
根据隐藏窗口的隐藏位置,获得某块区域,当鼠标在这个位置时,显示窗口。
实现代码
鼠标进入事件,调用hide_or_show判断是否该显示
def enterEvent(self, event):
self.hide_or_show("show", event)
鼠标离开事件,调用hide_or_show判断是否该隐藏
def leaveEvent(self, event):
self.hide_or_show("hide", event)
鼠标点击事件
def mousePressEvent(self, event):
if event.button() == Qt.LeftButton:
self.dragPosition = event.globalPos() - self.frameGeometry(
).topLeft()
QApplication.postEvent(self, QEvent(174))
event.accept()
捕捉鼠标移动事件
def mouseMoveEvent(self, event):
if event.buttons() == Qt.LeftButton:
try:
self.move(event.globalPos() - self.dragPosition)
event.accept()
except:pass
判断是否该隐藏
def hide_or_show(self, mode, event):
pos = self.frameGeometry().topLeft()
if mode == "show" and self.moved:
if pos.x() + WINDOW_WEIGHT >= SCREEN_WEIGHT: # 右侧显示
self.startAnimation(SCREEN_WEIGHT - WINDOW_WEIGHT + 2, pos.y())