[PyQt] When to and not to pass parent argument to widget constructors
Phil Thompson
phil at riverbankcomputing.com
Tue Apr 22 23:25:17 BST 2014
On 22/04/2014 3:43 pm, rj_pyqt_qwzqfors wrote:
> I am learning PyQt in order to rewrite my wxPython application to use
> it. Having been accustomed to using wxPython, I am used to being
> required to pass a parent as an argument to the constructor of every
> non-top-level widget. But in PyQt, the parent argument is often
> optional, and I am having some difficulty to know when I should and
> shouldn't use it.
>
> From what I have learned so far, I was guessing that perhaps the
> parent argument should not be used in cases where the parent of the
> widget will later be specified by calling a function (such as
> QDockWidget.setWidget, QMainWindow.addDockWidget,
> QMainWindow.addToolBar, QMainWindow.setCentralWidget,
> QStatusBar..addPermanentWidget, QToolBar.addWidget, ,
> QTabWidget.addTab, etc.), but should be used in all other cases. Is
> this correct? Could someone please help clarify this?
As far as widgets are concerned it is almost never necessary to specify
a parent. Things get sorted out automatically when you add them to a
layout.
For other QObject based objects it's your choice as to whether you give
them a parent or keep an explicit reference.
> Also, which is the more acceptable practice:
>
>> from PyQt5.QtWidgets import *
> OR:
>
>> from PyQt5.QtWidgets import QAction, QLabel,...QTabWidget, QToolBar
> (I know that generally the use of wild imports is discouraged in
> Python, but it's much easier than having to add a widget to the import
> list whenever I use another one.)
The latter, explicit is better than implicit.
Phil
More information about the PyQt
mailing list