2010-08-19 101 views
2

覆蓋pixMapItem上的鼠標事件對我無效;鼠標點擊事件不會被pixMapItem檢測到。這裏是我的代碼:Pyqt在鼠標單擊圖像時獲取像素位置和值

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

class DrawImage(QMainWindow): 
    def __init__(self, path): 

     QMainWindow.__init__(self) 
     self.setWindowTitle('Select Window') 
     self.local_image = QImage(path) 

     self.local_grview = QGraphicsView() 
     self.setCentralWidget(self.local_grview) 

     self.local_scene = QGraphicsScene() 

     self.image_format = self.local_image.format() 
     self.pixMapItem = self.local_scene.addPixmap(QPixmap(self.local_image)) 
     self.local_grview.setScene(self.local_scene) 




     self.pixMapItem.mousePressEvent = self.pixelSelect 

     self.show() 
     sys.exit(app.exec_()) 

    def pixelSelect(self, event): 
     print 'hello' 
     position = QPoint(event.pos().x(), event.pos().y()) 
     color = QColor.fromRgb(self.local_image.pixel(position)) 
     if color.isValid(): 
      rgbColor = '('+str(color.red())+','+str(color.green())+','+str(color.blue())+','+str(color.alpha())+')' 
      self.setWindowTitle('Pixel position = (' + str(event.pos().x()) + ' , ' + str(event.pos().y())+ ') - Value (R,G,B,A)= ' + rgbColor) 
     else: 
      self.setWindowTitle('Pixel position = (' + str(event.pos().x()) + ' , ' + str(event.pos().y())+ ') - color not valid') 

回答

3

我試過你的代碼,我相信你能得到它,如果改變

self.pixMapItem = self.local_scene.addPixmap(QPixmap(self.local_image)) 

self.pixMapItem = QGraphicsPixmapItem(QPixmap(self.local_image), None, self.local_scene) 
下面

是完整版本的工作你的代碼對我來說很好用:

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

class DrawImage(QMainWindow): 
    def __init__(self, parent=None): 
     super(QMainWindow, self).__init__(parent) 

     self.setWindowTitle('Select Window') 
     self.local_image = QImage('image_file_name.JPG') 

     self.local_grview = QGraphicsView() 
     self.setCentralWidget(self.local_grview) 

     self.local_scene = QGraphicsScene() 

     self.image_format = self.local_image.format() 
     #self.pixMapItem = self.local_scene.addPixmap(QPixmap(self.local_image)) 
     self.pixMapItem = QGraphicsPixmapItem(QPixmap(self.local_image), None, self.local_scene) 

     self.local_grview.setScene(self.local_scene) 

     self.pixMapItem.mousePressEvent = self.pixelSelect 

    def pixelSelect(self, event): 
     print 'hello' 
     position = QPoint(event.pos().x(), event.pos().y()) 
     color = QColor.fromRgb(self.local_image.pixel(position)) 
     if color.isValid(): 
      rgbColor = '('+str(color.red())+','+str(color.green())+','+str(color.blue())+','+str(color.alpha())+')' 
      self.setWindowTitle('Pixel position = (' + str(event.pos().x()) + ' , ' + str(event.pos().y())+ ') - Value (R,G,B,A)= ' + rgbColor) 
     else: 
      self.setWindowTitle('Pixel position = (' + str(event.pos().x()) + ' , ' + str(event.pos().y())+ ') - color not valid') 


def main(): 
    app = QtGui.QApplication(sys.argv) 
    form = DrawImage() 
    form.show() 
    app.exec_() 

if __name__ == '__main__': 
    main() 

希望這會有所幫助,敬請關注

+0

您是否知道QWidget是否有pixMapItem版本? – kthouz 2016-10-30 20:32:23

相關問題