我正在使用PyQt4,我想根据用户点击现有图像绘制一条线,该图像显示为图像标签.图像正确显示,单击工具栏中的图标后,用户将在图像上绘制一条线.
我已经覆盖mousePressEvent()并mouseReleaseEvent()获得x,y位置.我已经定义paintEvent()了画线.
def mousePressEvent(self,event):
self.startx=event.x()
self.starty=event.y()
def mouseReleaseEvent(self,event):
self.endx=event.x()
self.endy=event.y()
def paintEvent(self,event):
painter=QPainter()
painter.begin(self)
painter.setPen(QPen(Qt.darkGray,3))
painter.drawLine(self.startx,self.starty,self.endx,self.endy)
painter.end()
Run Code Online (Sandbox Code Playgroud)
selfmouseevents,错误说:
对象没有属性'self.startx' - (我应该如何将一个小部件与PyQt中的mouseevents相关联?) paintEvent() 即使我在应用程序周围移动鼠标也会被调用.提前致谢…
我建议您在释放鼠标后将该行设置为一个单独的对象.为此,请创建一个新类:
class line(QtGui.QWidget):
def __init__(self, point1, point2):
self.p1 = point1
self.p2 = point2
def paintEvent(self,event):
painter=QPainter()
painter.begin(self)
painter.setPen(QPen(Qt.darkGray,3))
painter.drawLine(self.p1,self.p2)
painter.end()
Run Code Online (Sandbox Code Playgroud)
然后我会定义你的鼠标事件如下.
def mousePressEvent(self,event):
self.startx=event.x()
self.starty=event.y()
def mouseReleaseEvent(self,event):
self.endx=event.x()
self.endy=event.y()
newLine = line(QtCore.QPoint(self.startx, self.starty), QtCore.QPoint(self.endx, self.endy))
Run Code Online (Sandbox Code Playgroud)
这应该允许用户单击并拖动鼠标,然后在释放鼠标时应该绘制线条而不影响绘制的任何其他内容.我通常在QGraphicsScenes中做一些事情并且它有点不同,但这个概念应该大致相同.如果你想在用户拖动鼠标时绘制线条,我也知道如何做到这一点,但我知道的方式要比这复杂得多,我建议使用QGraphicsScene来处理它,只要给我留言如果你想让我解释一下我是如何做到的.
| 归档时间: |
|
| 查看次数: |
5199 次 |
| 最近记录: |