Форум сайта python.su
Написал программу, которая создает иконку в системном трее и по нажатию на ней правой кнопки мыши показывает контекстное меню из 2-х пунктов Notes и Quit, пункт Notes ведет в подменю, состоящего из одного пункта Create new note. Но почему пункт Notes не отображается. Почему?
from PyQt4 import QtCore, QtGui import sys def main(): app = QtGui.QApplication(sys.argv) tray = QtGui.QSystemTrayIcon() icon = app.style().standardIcon(QtGui.QStyle.SP_DesktopIcon) tray.setIcon(icon) tray.show() CreateMenu(tray, app) sys.exit(app.exec_()) def CreateMenu(tray, app): m1 = QtGui.QMenu("Menu 1") m2 = QtGui.QMenu("Notes") m2.addAction("Create new note") m1.addMenu(m2) m1.addSeparator() m1.addAction("Quit", app.quit) tray.setContextMenu(m1) if __name__ == '__main__': main()
Офлайн
Из документации на функцию addMenu
This menu does not take ownership of menu.Т.е. когда передаешь подменю, родительское меню не берет контроль над ним, и если ссылок на него больше нет, оно удаляется. Решение - создавать меню с явным заданием родителя:
m2 = QtGui.QMenu("Notes", parent=m1)
Офлайн