pyqt5如何写一个类实现鼠标移动窗口功能
下面是一个简单的示例代码,展示了如何使用PyQt5编写一个类实现拖动窗口的功能:
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QCursor
from PyQt5.QtWidgets import QApplication, QMainWindow
class DraggableWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowFlags(Qt.FramelessWindowHint)
self.setAttribute(Qt.WA_TranslucentBackground)
self.draggable = False
self.offset = None
def mousePressEvent(self, event):
if event.button() == Qt.LeftButton:
self.draggable = True
self.offset = event.pos()
def mouseMoveEvent(self, event):
if self.draggable:
self.move(event.globalPos() - self.offset)
def mouseReleaseEvent(self, event):
if event.button() == Qt.LeftButton:
self.draggable = False
self.offset = None
def mouseDoubleClickEvent(self, event):
if event.button() == Qt.LeftButton:
if self.isMaximized():
self.showNormal()
else:
self.showMaximized()
def enterEvent(self, event):
self.setCursor(QCursor(Qt.SizeAllCursor))
def leaveEvent(self, event):
self.setCursor(QCursor(Qt.ArrowCursor))
if __name__ == '__main__':
app = QApplication([])
window = DraggableWindow()
window.show()
app.exec_()
在这个例子中,我们定义了一个名为DraggableWindow的类,它继承自QMainWindow类。我们通过设置窗口的属性和标志来让窗口无边框并且透明,以便我们可以在窗口中实现自定义的拖动功能。
我们还定义了一些方法来处理鼠标事件。在mousePressEvent中,我们检查鼠标是否按下了左键,并将draggable标志设置为True,以便在mouseMoveEvent中移动窗口。我们还记录鼠标的偏移量,以便在移动窗口时保持窗口与鼠标的位置关系。
在mouseMoveEvent中,我们检查draggable标志是否为True,如果是,则移动窗口。我们通过计算当前鼠标位置与偏移量之间的差异来计算窗口的新位置。
在mouseReleaseEvent中,我们检查鼠标是否释放了左键,并将draggable标志设置为False,以便停止移动窗口。
在mouseDoubleClickEvent中,我们检查鼠标是否双击了左键,并根据窗口的当前状态来最大化或还原窗口。
最后,在enterEvent和leaveEvent方法中,我们设置鼠标光标的样式,以便在鼠标进入或离开窗口时改变鼠标光标的样式
原文地址: https://www.cveoy.top/t/topic/evhO 著作权归作者所有。请勿转载和采集!