Я сделал приложение PyQt с фильтром событий, что делает движение виджет последующей мыши, он следит за движением мыши, а иногда возвращается в положение 0, 0
...PyQt: Widget постоянно перемещается в положение (0, 0)
import sys
from PyQt4 import QtGui, QtCore
import resources
class Window(QtGui.QMainWindow):
def __init__(self):
QtGui.QMainWindow.__init__(self)
widget = QtGui.QWidget(self) # Central Widget
self.edit = QtGui.QLineEdit(self) # Field that show's mouse position
self.somewidget = QtGui.QPushButton(self) # Widget that will follow mouse movement
self.setCentralWidget(widget)
self.edit.move(0, 0)
self.somewidget.show()
self.timer = QtCore.QTimer(self) # Timer that will be used to set a little interval for mouse movement, to make it smoother.
self.timer.timeout.connect(self.movefunc)
def eventFilter(self, source, event): # Defining event type to follow mouse movement without button.
if event.type() == QtCore.QEvent.MouseMove:
if event.buttons() == QtCore.Qt.NoButton:
self.pos = event.pos() # Define full position.
self.edit.setText('x: %d, y: %d' % (self.pos.x(), self.pos.y())) # show's mouse x and y position in field.
self.timer.start(5) # starts timer for 5 milliseconds.
else:
pass
return QtGui.QMainWindow.eventFilter(self, source, event)
def movefunc(self):
self.somewidget.move(self.pos.x(), self.pos.y()) # moves widget to mouse position in every 5 milliseconds.
if __name__ == '__main__':
import sys
app = QtGui.QApplication(sys.argv)
win = Window()
win.show()
app.installEventFilter(win)
sys.exit(app.exec_())
, так как вы можете видеть, что виджет перемещается каждые 5 миллисекунд, поэтому он может быть более плавным, но он возвращается в позицию 0, 0
иногда (каждые 1-2 секунды), что может быть проблемой? Как я могу ограничить его на определенные позиции, причем он будет плавным?
Что вы пытаетесь сделать? Почему кнопка перемещается при перемещении мыши? –