Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 更改矩形';sx值实际上不会在GUI中移动它_Python_Qgraphicsview_Pyside2 - Fatal编程技术网

Python 更改矩形';sx值实际上不会在GUI中移动它

Python 更改矩形';sx值实际上不会在GUI中移动它,python,qgraphicsview,pyside2,Python,Qgraphicsview,Pyside2,我正在使用PySide2开发Python中的GUI。我有一个图形视图,在这里我将放置一个图像,我想在该图像上绘制并移动一个多边形。我发现了许多在PySide、PySide2或pyqt4/5中用Python简单绘制多边形、圆等的示例。然而,我一直无法理解为什么我的图形项在没有删除和重画的情况下不会在事件上移动 我正在使用键盘更改PySide2QRectF上的X值。X值明显在变化,但矩形实际上没有移动 下面是一个简单的例子: 从PySide2导入QtCore、QtGui、QtWidgets 从fun

我正在使用PySide2开发Python中的GUI。我有一个图形视图,在这里我将放置一个图像,我想在该图像上绘制并移动一个多边形。我发现了许多在PySide、PySide2或pyqt4/5中用Python简单绘制多边形、圆等的示例。然而,我一直无法理解为什么我的图形项在没有删除和重画的情况下不会在事件上移动

我正在使用键盘更改PySide2
QRectF
上的X值。
X
值明显在变化,但矩形实际上没有移动

下面是一个简单的例子:

从PySide2导入QtCore、QtGui、QtWidgets
从functools导入部分
类调试绘图(QtWidgets.QGraphicsView):
定义初始化(self,*args,**kwargs):
super()
#初始化场景并设置大小
self.\u scene=qtwidts.qgraphicscene(self)
自我._场景设置(0,0500500)
self.setScene(self.\u场景)
#制作一支绿色钢笔,在x=20,y=30处绘制一个10宽20高的矩形
self.pen=QtGui.QPen(QtCore.Qt.green,0)
self.draw_rect=QtCore.QRectF(20,30,10,20)
#将矩形添加到场景中
self.\u scene.addRect(self.draw\u rect,self.pen)
def move_rect(自身,dx:int):
#移动现有矩形的方法
#获取x值
x=自绘制矩形x()
打印('x:{}dx:{}'。格式(x,dx))
#使用QRectF的moveLeft方法更改矩形的左侧x值
自绘制直线左移(x+dx)
self.update()
类MainWindow(QtWidgets.QMainWindow):
定义初始化(自):
super()。\uuuu init\uuuuu()
self.labelImg=调试绘图()
#获取一个键盘快捷键并将其连接到move_rect方法
next_shortcut=qtwidts.QShortcut(QtGui.QKeySequence('Right'),self)
next_shortcut.activated.connect(部分(self.labelImg.move_rect,1))
#获取左键快捷方式,向左移动一个像素
back_shortcut=qtwidts.QShortcut(QtGui.QKeySequence('Left'),self)
返回快捷方式。激活。连接(部分(self.labelImg.move\u rect,-1))
self.setCentralWidget(self.labelImg)
自设置最大高度(480)
self.update()
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
app=QtWidgets.QApplication([])
测试=主窗口()
testing.show()
app.exec()
以下是输出结果:


您显然看不到图像中的内容,但即使矩形的
x
值根据我们的打印调用而改变,图像中也不会有任何移动。我已经确认这不仅仅是我的眼睛,因为如果我在
move\u rect
中绘制新的矩形,它们会清晰地显示出来

draw\u rect
是一个
QRectF
是一个用于创建项()的输入,该项()由类似于
pen
的方法返回,也就是说,它接受信息,但不再使用它。其思想是使用
setPos()
移动项目:

类调试绘图(QtWidgets.QGraphicsView):
定义初始化(self,*args,**kwargs):
super()
#初始化场景并设置大小
self.\u scene=qtwidts.qgraphicscene(self)
self._scene.setscen直立(0,0,500,500)
self.setScene(self.\u场景)
#制作一支绿色钢笔,在x=20,y=30处绘制一个10宽20高的矩形
pen=QtGui.QPen(QtCore.Qt.green,0)
draw_rect=QtCore.QRectF(20,30,10,20)
#将矩形添加到场景中
self.item\u rect=self.\u scene.addRect(draw\u rect,pen)
def move_rect(自身,dx:int):
p=自项目直接位置()
p+=QtCore.QPointF(dx,0)
自项目直接设置位置(p)
如果仍要使用draw_rect,则必须在项目中再次设置:

    self.pen = QtGui.QPen(QtCore.Qt.green, 0)
    self.draw_rect = QtCore.QRectF(20, 30, 10, 20)
    # add the rectangle to our scene
    self.item_rect = self._scene.addRect(self.draw_rect, self.pen)

def move_rect(self, dx: int):
    # method for moving the existing rectangle
    # get the x value
    x = self.draw_rect.x()
    print('x: {} dx: {}'.format(x, dx))
    # use the moveLeft method of QRectF to change the rectangle's left side x value
    self.draw_rect.moveLeft(x + dx)
    self.item_rect.setRect(self.draw_rect)
self.pen=QtGui.QPen(QtCore.Qt.green,0)
self.draw_rect=QtCore.QRectF(20,30,10,20)
#将矩形添加到场景中
self.item\u rect=self.\u scene.addRect(self.draw\u rect,self.pen)
def move_rect(自身,dx:int):
#移动现有矩形的方法
#获取x值
x=自绘制矩形x()
打印('x:{}dx:{}'。格式(x,dx))
#使用QRectF的moveLeft方法更改矩形的左侧x值
自绘制直线左移(x+dx)
self.item\u rect.setRect(self.draw\u rect)
建议阅读,以便QGraphicsSitems、QGraphicsView和QGraphicscene正常工作

    self.pen = QtGui.QPen(QtCore.Qt.green, 0)
    self.draw_rect = QtCore.QRectF(20, 30, 10, 20)
    # add the rectangle to our scene
    self.item_rect = self._scene.addRect(self.draw_rect, self.pen)

def move_rect(self, dx: int):
    # method for moving the existing rectangle
    # get the x value
    x = self.draw_rect.x()
    print('x: {} dx: {}'.format(x, dx))
    # use the moveLeft method of QRectF to change the rectangle's left side x value
    self.draw_rect.moveLeft(x + dx)
    self.item_rect.setRect(self.draw_rect)