如何在PyQt4中将鼠标旋转成圆形

时间:2017-02-16 05:39:44

标签: python pyqt4

我正在尝试制作光标移动应用程序,如果用户输入任何数字,请说5&选择一个形状(圆形或方形):然后鼠标光标必须旋转5次才能生成所选形状。

我收到错误:

  

cursor.setPos((pos [0] + 1,pos [1] + 1))
  TypeError:' QPoint' object不支持索引。

这是我的代码:

import sys
from PyQt4 import QtGui, QtCore

class Example(QtGui.QWidget):
    def __init__(self):
        super(Example, self).__init__()

        self.initUI()

    def initUI(self):

        lblText = QtGui.QLabel("Enter Number: ", self)
        numText = QtGui.QLineEdit(self)

        btncir = QtGui.QPushButton('Circle', self)
        btncir.setToolTip('Press this button to rotate mouse in circle')

        btnsqr = QtGui.QPushButton('Square', self)
        btnsqr.setToolTip('Press this button to rotate mouse in square')

        fbox = QtGui.QFormLayout()
        fbox.addRow(lblText, numText)
        fbox.addRow(btncir, btnsqr)

        self.setLayout(fbox)

        cursor = QtGui.QCursor()
        pos = cursor.pos()
        cursor.setPos((pos[0] + 1, pos[1] + 1))

        self.setWindowTitle('Move Cursor')
        self.show()

def main():
    app = QtGui.QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())


if __name__ == '__main__':
    main()

1 个答案:

答案 0 :(得分:1)

pos = cursor.pos()QPoint个实例时,您收到的内容。要获得QPoint的位置,您需要使用

提取它
 x,y = pos.x(), pos.y()

另见herehere。所以在您的代码示例中,您可能想要

cursor.setPos(pos.x() + 1, pos.y() + 1)

关于旋转光标。据我所知,你希望光标移动一个圆圈。这是一个如何实现这一目标的小例子

class Example(QtGui.QWidget):
    def __init__(self):
        super(Example, self).__init__()

        self.initUI()

    def initUI(self):

        self.lblText = QtGui.QLabel("Enter Number: ", self)
        self.numText = QtGui.QLineEdit(self)

        self.btncir = QtGui.QPushButton('Circle', self)
        self.btncir.setToolTip('Press this button to rotate mouse in circle')
        self.btncir.connect(self.btncir, QtCore.SIGNAL('clicked()'), self.circleClicked)

        self.btnsqr = QtGui.QPushButton('Square', self)
        self.btnsqr.setToolTip('Press this button to rotate mouse in square')

        fbox = QtGui.QFormLayout()
        fbox.addRow(self.lblText, self.numText)
        fbox.addRow(self.btncir, self.btnsqr)

        self.setLayout(fbox)

        self.cursor = QtGui.QCursor()

        self.setWindowTitle('Move Cursor')
        self.show()

    def circleClicked(self):

        # Grab number of rotations
        n=int(str(self.numText.text()))

        # Define circle
        angle=np.linspace(-np.pi,np.pi,50)
        radius=10.

        # Get Cursor
        pos = self.cursor.pos()
        X=pos.x()
        Y=pos.y()

        # Loop through repitions
        for i in range(n):

            # Loop through angles
            for phi in angle:

                # New coordinate
                x=X+radius*np.cos(phi)
                y=Y+radius*np.sin(phi)

                # Update position
                self.cursor.setPos(x,y)

                # Sleep a bit so we can see the movement
                time.sleep(0.01)

请注意,我创建了Example的所有小部件属性,这使得在Example的方法中更容易访问它们。另请注意,QCursor.setPos不会使用tuple,而是使用两个整数作为输入。