2016-05-27 10 views
0

私は...それは、マウスの動きに追従し、時には位置0, 0に戻り、ウィジェットフォローマウスの動きを作るイベントフィルタとPyQtのアプリを作っているPyQtは:ウィジェットは常に位置に移動する(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ミリ秒ごとに移動するので、よりスムーズになることがありますが、時々(1〜2秒ごとに)位置0, 0に戻ります。どのように私はそれを滑らかにして、特定の位置に制限することができますか?

+0

あなたは何をしようとしていますか?マウスが動いたときにボタンが動くのはなぜですか? –

答えて

0

あなたは何度もtimer.start()多くを呼び出す必要はありませんいくつかのこと

。タイマーが開始されると、timer.stop()に電話するまで5ミリ秒ごとに引き続きトリガーを継続します。

Windowとボタンの座標系は同じではありません。座標は常に親のジオメトリにあります。 Windowの場合は、トップレベルのウィンドウなので、グローバル座標を意味します。ボタンの場合、ウィンドウがその親であるため、座標はウィンドウのジオメトリにあります。だから、ウィンドウからボタンの座標を与えることは本当に意味をなさない。

+0

私は自分のゲームにスコープのものを作ろうとしているので、バックグラウンドが範囲内で動き、マウスの動きで、どうやって違う方法で達成できますか? – ShellRox

関連する問題