python logo

pyqt menu


Python hosting: Host, run, and code Python in the cloud!
PyQT Menu pythonspot PyQT Menu

PyQt4 menus appear in the top of the window bar. A menu gives the user control over the application and is often location in the top of the window.

The QMainWindow class creates the main application window. This class has a method named menuBar() which adds the title bar.

Menus can be added to the title bar using addMenu(). Inside each menu you can add a command using the addAction method.

Related course:

PyQt4 menubar


This code will add a menu to your qt4 app:

#! /usr/bin/env python
# -*- coding: utf-8 -*-
#
import sys
from PyQt4.QtGui import *

# Create an PyQT4 application object.
a = QApplication(sys.argv)

# The QWidget widget is the base class of all user interface objects in PyQt4.
w = QMainWindow()

# Set window size.
w.resize(320, 240)

# Set window title
w.setWindowTitle("Hello World!")

# Create main menu
mainMenu = w.menuBar()
mainMenu.setNativeMenuBar(False)
fileMenu = mainMenu.addMenu('&File')

# Add exit button
exitButton = QAction(QIcon('exit24.png'), 'Exit', w)
exitButton.setShortcut('Ctrl+Q')
exitButton.setStatusTip('Exit application')
exitButton.triggered.connect(w.close)
fileMenu.addAction(exitButton)

# Show window
w.show()

sys.exit(a.exec_())

Download PyQT Code (Bulk Collection)

BackNext





Leave a Reply:




Morm Sat, 08 Aug 2015

I copy-paste it to Xcode - and it shows only the window and its title - the rest is empty - what can be the reason for that?

Staff Mon, 10 Aug 2015

Hi, this may be an issue with QT specific to Mac OS. Unfortunately, I don't have access to a mac

Joshua Fri, 21 Aug 2015

If w = QWidget() and not w = QMainWindow() the option to the menu will not be available.

Frank Sat, 22 Aug 2015

Thanks Joshua!

Matt Sun, 11 Oct 2015

on OS X here, and this seems to mac specific.

Choon Tue, 13 Oct 2015

I had a same issue on Mac and resolved by inserting menu.setNativeMenuBar(False) below of mainMenu = w.menuBar().

Gardnm4 Sat, 07 Nov 2015

You forgot a word in your solution. The line should be:

mainMenu.setNativeMenuBar(False)

Frank Sun, 08 Nov 2015

Thanks!

Jacco Van Dorp Wed, 09 Dec 2015

I'm trying to add some custom menu options. I assumed I could use the slots as we use them for buttons, but it seems I was wrong. What I'm trying to do is to run a sub-process. Is it possible to give an example of how to run something like that from a menu option?

Frank Thu, 10 Dec 2015

What do you mean by custom menu options? If you want a separate process you could start a thread

Jacco Van Dorp Wed, 16 Dec 2015

I was slightly mishandling the slotting mechanism. I was trying to use:

menuoption.triggered.connect(somefunc(args))

where I should have used:

menuoption.triggered.connect(lambda:somefunc(args))

My apologies for the vague question. I had just started on QT, but now that I've got some 30-ish hours in it I agree that the questions wasn't really clear.

That all said, maybe the Lambda trick could be included somewhere? I'm auto-generating menu's from the init functions of my classes, and it allows me to track where a certain command is coming from(generally, by passing the class object as argument). Other problems it could solve could be a lot simpler though.