2016-10-17 2 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!, в этом случае.

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