2012-01-24 15 views
5

私はpyqtを初めて使用しています。私はあなたが画像をクリックし、クリックしたポイントの座標を覚えて、GUIのウィジェットでスティックを描くことができるプログラムをやっています。私のコードでは、4ポイントのポリゴンを表示するための新しいウィンドウが表示されます。しかし、私はそれが私がpyqtによって作られたuiファイルに表示されることを願っています。ウィジェットのオブジェクト名はウィジェットと呼ばれています。誰かが新しいウィンドウを表示しないでGUIウィジェットにポリゴンを表示するようにコードを修正するのを助けてくれることを願っています。pyqt GUIの先進的なウィジェットを使用しています

ありがとうございました!

import sys 
from PyQt4.QtCore import * 
from PyQt4 import QtGui, QtCore 
from PyQt4.QtGui import * 
from Main_window import * 

global imgloc 
imgloc = "1.jpg" 
array = [] 
clicks = 0 

class MyForm(QtGui.QMainWindow): 

    def __init__(self, parent=None): 
     QtGui.QWidget.__init__(self, parent) 
     self.ui = Ui_MainWindow() 
     self.ui.setupUi(self) 
     self.local_image = QImage(imgloc) 
     self.imageLocation = imgloc 
     self.local_scene = QGraphicsScene() 
     self.pixMapItem = QGraphicsPixmapItem(QPixmap(self.local_image), None, self.local_scene) 
     self.ui.graphicsView_5.setScene(self.local_scene) 
     self.pixMapItem.mousePressEvent = self.pixelSelect 

    def pixelSelect(self,event): 
     global imgloc 
     a = event.pos().x() 
     b = event.pos().y() 
     global clicks 
     global array 
     if clicks != 4: 
      clicks += 1 
      point = QPoint(a,b) 
      array.append(point) 
     else: 
      clicks = 0 
      dialog = DialogBody() 
      dialog.show() 
      dialog.exec_() 
      array = [] 

class DialogBody(QDialog): 
    def __init__(self,parent=None): 
     super(QDialog,self).__init__(parent) 
     self.setGeometry(100, 100, QImage(imgloc).height(), QImage(imgloc).width()) 

    def paintEvent(self,e): 
     qp = QtGui.QPainter() 
     qp.begin(self) 
     self.drawBody(qp) 
     qp.end() 

    def drawBody(self, qp): 
     qp.setPen(QtCore.Qt.red) 
     qp.drawPolygon(array[0],array[1],array[2],array[3]) 
     qp.drawEllipse(array[0],2,2) 
     qp.drawEllipse(array[1],2,2) 
     qp.drawEllipse(array[2],2,2) 
     qp.drawEllipse(array[3],2,2) 

if __name__ == "__main__": 
    app = QtGui.QApplication(sys.argv) 
    myapp= MyForm() 
    myapp.show() 
    sys.exit(app.exec_()) 

答えて

5

QGraphicsSceneにアイテムを描画したいと思われますか?この場合、あなたはシーンに項目を追加することができます。

#!/usr/bin/env python 
import sys 

from PyQt4 import QtCore, QtGui 


class MainWidget(QtGui.QWidget): 
    def __init__(self, parent=None): 
     QtGui.QWidget.__init__(self, parent) 
     self.scene = QtGui.QGraphicsScene() 
     self.view = QtGui.QGraphicsView(self.scene) 
     layout = QtGui.QVBoxLayout() 
     layout.addWidget(self.view) 
     self.setLayout(layout) 
     self.pixmap_item = QtGui.QGraphicsPixmapItem(QtGui.QPixmap('image.png'), None, self.scene) 
     self.pixmap_item.mousePressEvent = self.pixelSelect 
     self.click_positions = [] 

    def pixelSelect(self, event): 
     self.click_positions.append(event.pos()) 
     if len(self.click_positions) < 4: 
      return 
     pen = QtGui.QPen(QtCore.Qt.red) 
     self.scene.addPolygon(QtGui.QPolygonF(self.click_positions), pen) 
     for point in self.click_positions: 
      self.scene.addEllipse(point.x(), point.y(), 2, 2, pen) 
     self.click_positions = [] 


if __name__ == "__main__": 
    app = QtGui.QApplication(sys.argv) 
    widget = MainWidget() 
    widget.resize(640, 480) 
    widget.show() 
    sys.exit(app.exec_()) 

QGraphicsSceneは、多くの機能を持っています。

Graphics View Framework overviewをQt docsで読む。

+1

最後に、実際に動作する便利なコードを提供する例を示します。 –

+0

どのようにいくつかの位置に別のimage.pngを追加しますか?たとえば楕円の代わりに、私は少しの画像が必要です。私はaddPixmapとaddItemで試しましたが、どれも成功しませんでした。助けてください – Aleksandar

+0

'' item = self.scene.addPixmap(QtGui.QPixmap( 'some_image.png')) ''は動作するはずです。しかし、イメージは(0、0)の位置に追加されるので、それを変更する必要があります: '' item.setPos(position) ''、 '' position''は'' event.pos() '' – reclosedev

関連する問題