user14618630
user14618630

Reputation:

How to create a dropdown menu on clicking Qaction in PyQt5?

I am making an application where I want to create a dropdown menu if anyone clicks on the Qaction.
My code

self.navtb = QToolBar("Navigation")
self.navtb.setIconSize(QSize(25, 25))
self.navtb.setMovable(False)
self.addToolBar(self.navtb)

option_btn = QAction(QIcon(os.path.join('images', 'options.png')), "Option", self)
self.navtb.addAction(option_btn)

Upvotes: 0

Views: 1317

Answers (1)

ypnos
ypnos

Reputation: 52407

A QAction can have an associated menu which you can simply set with setMenu(). This menu will pop up (drop down) on click+hold.

Now all you need is to set your button to directly go for the menu on click by altering its popup mode. Note that while the wording pop up is used, the menu will be a proper drop-down menu in a toolbar scenario.

In your example it would roughly translate to:

option_btn.setMenu(...)
self.navtb.widgetForAction(option_btn).setPopupMode(QToolButton.InstantPopup)

For reference, this is how I do it in my code in C++:

// initialize compute menu and let button display menu without holding mouse
actionComputeDisplay->setMenu(new QMenu(widget));
auto btn = qobject_cast<QToolButton*>(toolBar->widgetForAction(actionComputeDisplay));
btn->setPopupMode(QToolButton::ToolButtonPopupMode::InstantPopup);

Upvotes: 2

Related Questions