QGraphicsView showEvent not working.
-
My QGraphicsView get size return(100, 30), I do some search find out the size won't correct before it was shown.
So I want to override showEvent to get the correct size, but my showEvent not working.class PhotoViewer(QtWidgets.QGraphicsView): tool_lock = 'mouse' def __init__(self, parent): ... def showEvent(self, event): super().showEvent(event) print("Test") self.showEventHelper() def showEventHelper(self): self.fitInView()
but the Test never be printed out.
-
@mrjj said in QGraphicsView showEvent not working.:
how can it be anything but a member function?
Indentations define the scope in Python, like {} do in C++.
If the code is really like that then showEvent is indeed not a method in PhotoViewer. -
@jsulm
Hi
I know about the invisible white space for scope control but i do wonder what it then
defaults too. a global function ? i guess since then the scope is not the class one.
There is no such thing as "override" to make sure you do in fact override ? -
I believe that
self
is just a convention. The first parameter of a non-static class function receives the instance of the class. There's nothing stopping you from usingthis
or anything else. There's also nothing stopping a non-member function from having a first argument calledself
.class MyClass: def __init__(this): this.value = 1 def f(the_object): return the_object.value def callTheFunction(self): print(self.f()) instance = MyClass() callTheFunction(instance)
Expected output:
1
-
@mrjj said in QGraphicsView showEvent not working.:
defaults too. a global function
Well, just a function.
I'm not sure there is something like "override" - I did not do much Python in last years :-) -
@mrjj said in QGraphicsView showEvent not working.:
@jeremy_k
ok. That's actually much like c++ except you don't have to see, write or care about it :)Python is great like that. It pushes you to do it yourself, or use tooling to solve problems. The tooling is unable to give definitive answers because so many typos result in legal code with different behavior. I'm ready to go back to C++.
-
@jeremy_k
Well, i had very little experience with it. back when it was kinda new, i did fool around with it a bit and
then mail the code to home. At home, the program suddenly didn't run as expected and i realized how deadly spaces can be and that was the end of my excitement over the language.But its very popular. So I guess it does works well for some people.
-
Hi
The function is too much intended so its not part of the class -
class PhotoViewer(QtWidgets.QGraphicsView): tool_lock = 'mouse' def __init__(self, parent): ... def showEvent(self, event): super().showEvent(event) print("Test") self.showEventHelper() def showEventHelper(self): self.fitInView()
-
@jsulm oh, sorry I am not notice that, but this is not a problem, it way my typo when I copy from my vscode, in my vscode is
class PhotoViewer(QtWidgets.QGraphicsView): tool_lock = 'mouse' def __init__(self, parent): super(PhotoViewer, self).__init__(parent) ... def showEvent(self, event): super().showEvent(event) print("Test") self.showEventHelper() def showEventHelper(self): self.fitInView()
and the problem still not solve.
-
Hi,
There's an issue with your init function. The first parameter shall be a scene, the second is the parent.
See the class documentation
-
@SGaist I wonder if that documentation is malformatted due to Python not supporting function overloading. The highlighted line indicates two arguments for the constructor. Inset below that appears to be a second constructor version that only accepts an optional QWidget parent. The two sentences at the end initially attracted my attention.
-
@JonB It's not my code.
I'm not convinced that misuse of the constructor which doesn't throw an exception or lead to program termination will cause a correctly implemented showEvent() to be ignored. A view without a scene is blank, but still a valid and showable QWidget.
import PyQt5.QtWidgets as QtWidgets class View(QtWidgets.QGraphicsView): def showEvent(self, event): print("showEvent") super().showEvent(event) app = QtWidgets.QApplication([]) view = View() view.show()
~:$ python test.py showEvent
-
@jeremy_k said in QGraphicsView showEvent not working.:
A view without a scene is blank, but still a valid and showable QWidget.
I was not aware of this. Your code shows
showEvent
being printed. Originally you said "Test never be printed out". So what is the situation?