2016-10-17 3 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には2つの可動ボタンがあり、QGraphicsViewにマウスをドラッグして線を描くことができます。しかし、私がしたいことは、2つのボタンの間に線を引くことです。詳細については、btn1(Test1)を右クリックし、btn2(Test2)を右クリックすると、2つのボタンの間に線が作成されます。私はこの問題を1ヶ月間苦労している。 Plzヘルプ!PYQT 2つのボタンの間に線を引く方法

答えて

0

ボタン間に描画する線も移動可能でなければならないと仮定しています。それだけで簡単ですされていない場合、あなたは、単に使用することができますラインは、ボタンと一緒に移動する必要がある場合

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

だから、最初あなたは二つのボタンとラインからなるミニウィジェットを作成し、あなたが移動することができますので、ウィジェット全体その場合はThis might help!です。

関連する問題