当鼠标在一个小部件或矩形区域内被点击或点击并拖动时,我需要某种鼠标位置的视觉反馈。视觉反馈应该停留在鼠标被释放的地方。我做了类似下面的事情,但这并不是我要做的:
import sys
from PySide2.QtCore import *
from PySide2.QtGui import *
from PySide2.QtWidgets import *
class test(QLabel):
def __init__(self):
super(test, self).__init__()
self.setMouseTracking(True)
self.resize(300, 300)
self.handle = QPushButton()
self.handle.setFixedSize(15, 15)
self.handle.setParent(self)
self.handle.setText("+")
self.handle.setStyleSheet("background: none;"
"border: 1px solid;"
"border-radius: 7px;")
def mousePressEvent(self, pos):
if pos.button() == Qt.LeftButton:
self.handle.move(pos.x(), pos.y())
print(str(pos.x()) + ", " + str(pos.y()))
def mouseMoveEvent(self, pos):
if pos.buttons() & Qt.LeftButton:
self.handle.move(pos.x(), pos.y())
print(str(pos.x()) + ", " + str(pos.y()))
if __name__ == '__main__':
import sys
app = QApplication(sys.argv)
t = test()
t.show()
sys.exit(app.exec_())
以上代码的问题是:
按钮的位置是从其左上角开始计算的,因此我必须执行如下操作
self.handle.move(pos.x() -7, pos.y() -7)
使它出现在中间,这是非常不一致的。
视觉反馈应该停留在窗口部件或区域内,而不是在鼠标超出边界时超出边界。同样,我可以用几行不一致的代码来解决这个问题(因为我不是Maven)。
我一直在寻找一些可以帮助我实现它的东西,我遇到的最好的事情是安装pyqtgraph。但我怀疑这是否会占用更多的资源,添加一个新的库会使事情复杂化。或者这是我最好的选择?
下图显示了类似的情况。
2条答案
按热度按时间a6b3iqyw1#
正如文章中所指出的,考虑拖动元素和窗口的几何形状就足够了:
66bbxpm52#
在pyqt中查找拖动鼠标的位置的名称
释放鼠标的位置