PyQt5 widget properties from .ui not showing in __init__ after load via uic.loadUi().
Hello all, this is a bit of a strange one. I have a subclass of QPushButton called simply Button, and I lay out a .ui file full of Buttons. I give them names and custom styles in QT Designer, but when examining these names and styles in Button's __init__() they're always blank. (This is after the call to super().__init__(…).)
Here's the relevant fragment.
Code:
def __init__(self, parent=None, showHitRects=False):
self.keepActiveLook = False
super().__init__(parent, showHitRects=showHitRects)
print('name', self.objectName(), self.styleSheet())
name and stylSheet are always ''. The name and styleSheet print correctly when I query them later, from a parent panel's __init__.
Does anyone know why this is happening, or how to retrieve the original name when the object's being __init__'d?
Thanks!
–DDR
Re: PyQt5 widget properties from .ui not showing in __init__ after load via uic.loadU
QWidgets are not fully realized until they are "shown" (generally when their parent widget's showEvent() is executed). Visible properties (like size, position, etc.) are not valid until the layout has moved and sized child widgets prior to showing them. setupUi() merely creates the widget hierarchy, and it is the set of resize and other events prior to the showEvent() which fully fleshes it out.
So nothing you retrieve in __init__() (or in a C++ constructor) can be trusted to be valid.
Re: PyQt5 widget properties from .ui not showing in __init__ after load via uic.loadU
Ahhh, thank you! This helps quite a bit. :)