我正在尝试制作光标移动应用程序,如果用户输入任何数字,请说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()
答案 0 :(得分:1)
当pos = cursor.pos()
为QPoint
个实例时,您收到的内容。要获得QPoint
的位置,您需要使用
x,y = pos.x(), pos.y()
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
,而是使用两个整数作为输入。