2016-10-17 1 views
0
from PyQt4 import QtGui, QtCore 

class Window(QtGui.QWidget): 
    def __init__(self): 
     QtGui.QWidget.__init__(self) 
     self.view = View(self) 
     self.button = QtGui.QPushButton('Clear View', self) 
     self.button.clicked.connect(self.handleClearView) 
     layout = QtGui.QVBoxLayout(self) 
     layout.addWidget(self.view) 
     layout.addWidget(self.button) 


    def handleClearView(self): 
     self.view.scene().clear() 

class DragButton(QtGui.QPushButton): 

    def mousePressEvent(self, event): 
     self.__mousePressPos = None 
     self.__mouseMovePos = None 
     if event.button() == QtCore.Qt.LeftButton: 
      self.__mousePressPos = event.globalPos() 
      self.__mouseMovePos = event.globalPos() 

     #super(DragButton, self).mousePressEvent(event) 

    def mouseMoveEvent(self, event): 
     if event.buttons() == QtCore.Qt.LeftButton: 
      # adjust offset from clicked point to origin of widget 
      currPos = self.mapToGlobal(self.pos()) 
      globalPos = event.globalPos() 
      diff = globalPos - self.__mouseMovePos 
      newPos = self.mapFromGlobal(currPos + diff) 
      self.move(newPos) 
      self.__mouseMovePos = globalPos 

     #super(DragButton, self).mouseMoveEvent(event) 

    def mouseReleaseEvent(self, event): 
     if self.__mousePressPos is not None: 
      moved = event.globalPos() - self.__mousePressPos 
      if moved.manhattanLength() > 3: 
       event.ignore() 
       return 

     #super(DragButton, self).mouseReleaseEvent(event) 

class View(QtGui.QGraphicsView): 
    def __init__(self, parent): 
     QtGui.QGraphicsView.__init__(self, parent) 
     self.setScene(QtGui.QGraphicsScene(self)) 
     self.setSceneRect(QtCore.QRectF(self.viewport().rect())) 
     btn1=DragButton('Test1', self) 
     btn2=DragButton('Test2', self) 

    def mousePressEvent(self, event): 
     self._start = event.pos() 

    def mouseReleaseEvent(self, event): 
     start = QtCore.QPointF(self.mapToScene(self._start)) 
     end = QtCore.QPointF(self.mapToScene(event.pos())) 
     self.scene().addItem(
      QtGui.QGraphicsLineItem(QtCore.QLineF(start, end))) 
     for point in (start, end): 
      text = self.scene().addSimpleText(
       '(%d, %d)' % (point.x(), point.y())) 
      text.setBrush(QtCore.Qt.red) 
      text.setPos(point) 

if __name__ == '__main__': 

    import sys 
    app = QtGui.QApplication(sys.argv) 
    window = Window() 
    window.resize(640, 480) 
    window.show() 
    sys.exit(app.exec_()) 

여기 내 코드입니다. QGraphicsView에는 두 개의 이동 가능한 버튼이 있으며 마우스 드래그로 QGraphicsView에 선을 그릴 수 있습니다. 하지만 내가하고 싶은 것은 두 개의 버튼 사이에 선을 그리는 것입니다. 자세한 내용을 보려면 btn1 (Test1)을 마우스 오른쪽 단추로 클릭 한 다음 btn2 (Test2)를 마우스 오른쪽 단추로 클릭하면 두 단추 사이에 줄이 생깁니다. 나는이 문제를 한 달 동안 고민하고있다. Plz 도움말!PYQT 두 개의 단추 사이에 선 그리는 방법

답변

0

버튼 사이에 그려야하는 선도 이동 가능해야한다고 가정합니다. 그냥 간단하지 않으면 당신은 사용할 수 있습니다 : 선이 버튼과 함께 이동해야 할 경우

lines = QtGui.QPainter() 
lines.setPen(self) 
lines.drawLine(x1,y1,x2,y2) 

그래서, 먼저 당신이 두 개의 버튼과 선으로 구성된 미니 위젯을 만들 이동할 수 있습니다 전체 위젯. 이 경우 This might help!입니다.