Matching 2 .tiff images pixel-by-pixel
-
I added them to the main class. I am trying to call the methods, like this:
self.mousePressEvent(event) self.mouseMoveEvent(event)etc.
But what do I put inside/instead of "event"?
The code you showed higher up to drive the rubber band.
Or the docs @SGaist points to. they explain in detail what is needed.def mousePressEvent(self, event): ///// this set the start location of the band self.origin = event.pos() self.rubberband.setGeometry( QtCore.QRect(self.origin, QtCore.QSize())) self.rubberband.show() QtGui.QWidget.mousePressEvent(self, event) def mouseMoveEvent(self, event): // this makes the band follow the mouse to adjust the size if self.rubberband.isVisible(): self.rubberband.setGeometry( QtCore.QRect(self.origin, event.pos()).normalized()) QtGui.QWidget.mouseMoveEvent(self, event) def mouseReleaseEvent(self, event): // this is the end of the operation and you use the rectange defined by the band if self.rubberband.isVisible(): self.rubberband.hide() rect = self.rubberband.geometry() ... then use rect for whatever you need -
@mrjj: Thanks for your help! I am searching all morning. Here https://doc.qt.io/qtforpython/PySide6/QtWidgets/QRubberBand.html#more I don't see something about what to put inside the "event". The only I can understand is to use this inside events: https://doc.qt.io/qtforpython-5/PySide2/QtGui/QMouseEvent.html
-
@mrjj: Thanks for your help! I am searching all morning. Here https://doc.qt.io/qtforpython/PySide6/QtWidgets/QRubberBand.html#more I don't see something about what to put inside the "event". The only I can understand is to use this inside events: https://doc.qt.io/qtforpython-5/PySide2/QtGui/QMouseEvent.html
Im not sure what you refer too ?
def mouseReleaseEvent(self, event): <<< this event ? the paramter ?
To use the rubberband, we use 3 functions as shown.
-
@mrjj
Yes, I try this:self.mousePressEvent(event)and the code requires to put something instead of "event". This is the error:
File "code.py", line 310, in __init__ self.mousePressEvent(event) NameError: name 'event' is not defined -
Where are you calling these methods from ?
-
@SGaist : Inside this method:
def __init__(self, parent=None): . . . (code) . . . self.mousePressEvent(event) self.mouseMoveEvent(event) self.mouseReleaseEvent(event) . . . (other methods + code per method) . . . def mousePressEvent(self, event): (code) def mouseMoveEvent(self, event): (code) def mouseReleaseEvent(self,event): (code)which the first method of the class. Any idea?
-
That's not how it works. These methods are automatically called when appropriate.
-
@SGaist : So I remove these lines?
self.mousePressEvent(event) self.mouseMoveEvent(event) self.mouseReleaseEvent(event)What should I change?
-
Implement the methods like shown in the QRubberBand class documentation.
-
@SGaist: Ok, I followed this: https://doc.qt.io/qtforpython/PySide6/QtWidgets/QRubberBand.html#qrubberband I put them into the Class. And that's it?
-
That's the base yes.
-
@SGaist: It seems to get response, although I do not see the red rectangle... But the mouse events seem to recognize when I press or when I release the mouse. But I need to install rubberband because I get this error:
File "code.py", line 174, in mouseMoveEvent rubberBand.setGeometry(QRect(origin, event.pos()).normalized()) NameError: name 'rubberBand' is not definedI am trying to fix it though! THANX!!!
-
@SGaist: It seems to get response, although I do not see the red rectangle... But the mouse events seem to recognize when I press or when I release the mouse. But I need to install rubberband because I get this error:
File "code.py", line 174, in mouseMoveEvent rubberBand.setGeometry(QRect(origin, event.pos()).normalized()) NameError: name 'rubberBand' is not definedI am trying to fix it though! THANX!!!
@john_hobbyist said in Matching 2 .tiff images pixel-by-pixel:
NameError: name 'rubberBand' is not defined
So, did you define rubberBand?
-
@jsulm: I try this solution from here: https://stackoverflow.com/questions/59899103/python-3-6-how-to-install-rubberband I haven't found a working solution but I am trying, because it has many! Any other idea?
-
@jsulm: I try this solution from here: https://stackoverflow.com/questions/59899103/python-3-6-how-to-install-rubberband I haven't found a working solution but I am trying, because it has many! Any other idea?
@john_hobbyist You did not answer the question...
The error you get says that rubberBand was not defined. It has nothing to do with installing anything. -
-
@john_hobbyist Please read more carefully! Nobody is talking about "rubberband"!
The question was about: "NameError: name 'rubberBand' is not defined"
rubberband != rubberBand
So, one more time I repeat the question: was rubberBand defined anywhere? -
There are some errors in the python document snippet that will be fixed.
Here's an example:
import sys from PySide2.QtCore import QRect from PySide2.QtCore import QSize from PySide2.QtWidgets import QWidget from PySide2.QtWidgets import QRubberBand from PySide2.QtWidgets import QApplication class Widget(QWidget): def __init__(self, parent=None): super().__init__(parent) self.rubberBand = None self.origin = None def mousePressEvent(self, event): self.origin = event.pos() if not self.rubberBand: self.rubberBand = QRubberBand(QRubberBand.Rectangle, self) self.rubberBand.setGeometry(QRect(self.origin, QSize())) self.rubberBand.show() def mouseMoveEvent(self, event): self.rubberBand.setGeometry(QRect(self.origin, event.pos()).normalized()) def mouseReleaseEvent(self, event): self.rubberBand.hide() # determine selection, for example using QRect.intersects() # and QRect.contains(). if __name__ == "__main__": app = QApplication(sys.argv) widget = Widget() widget.show() sys.exit(app.exec_())On a side note, it looks like you are a beginner with Python, I would recommend getting the basics first before going further.
-
@SGaist: I installed PySide2 and your code runs perfectly! Many thanks!
I combined your above code with my code and tried to run it, but I get this error:
File "code.py", line 30, in <module> from PySide2.QtCore import QRect ImportError: /lib/x86_64-linux-gnu/libQt5Core.so.5: version `Qt_5.15' not found (required by /home/john/.local/lib/python3.8/site-packages/PySide2/QtCore.abi3.so)After google search I found and followed the suggestions from this tutorial: https://stackoverflow.com/questions/63903441/python3-importerror-lib-x86-64-linux-gnu-libqt5core-so-5-version-qt-5-15-n which does not help because it is related to PyQt5 and not PySide2.
I have to note at this point that in my code I use both PyQt5 and PySide2 packages. Could the above error be a result of conflict between the packages?
I also study this: https://forum.qt.io/topic/89263/qt5-pyqt5-and-opencv-problem-with-import