2017-02-16 23 views
0

Я пытаюсь сделать приложение для перемещения курсора, в котором, если пользователь вводит любое число, скажем, 5 & выберите одну форму (Круг или Квадрат): тогда курсор мыши должен вращаться 5 раз делая эту выбранную форму.Как поворачивать мышь в круглой форме в PyQt4

Я получаю сообщение об ошибке:

cursor.setPos((pos[0] + 1, pos[1] + 1))
TypeError: 'QPoint' object does not support indexing.

Это мой код:

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

Что вы получаете, когда у вас есть pos = cursor.pos() это QPoint экземпляр. Для того, чтобы получить положение QPoint, необходимо извлечь его с помощью

x,y = pos.x(), pos.y() 

смотри также here и here. Поэтому в вашем примере кода вы, вероятно, захотите сделать

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, но два ввода в качестве входных данных.

+0

Спасибо за ваше время, но, добавив это снова дает мне ошибку .. Ошибка: cursor.setPos ((pos.x + 100, pos.y + 100)) TypeError: неподдерживаемый тип операнда (s) для +: 'builtin_function_or_method' и 'int' Моя основная цель - во всяком случае вращать курсор в круговом движении. Можете ли вы помочь мне в этом. Спасибо за ответ :) –

+0

Вы получили ошибку, потому что я допустил ошибку. '' pos.x'' возвращает метод '' pos.x() '' значение. Я сделал редактирование и написал для вас небольшой пример. – alexblae

+0

Я попытался запустить код, сделанный u .. он выполнен без ошибок, но я не получил никакого вывода. Я импортировал эту библиотеку для запуска этого кода: import numpy as np время импорта Я импортировал правильные библиотеки? –

 Смежные вопросы

  • Нет связанных вопросов^_^