Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » GUI
  • » Отображение контекстного подменю [RSS Feed]

#1 Дек. 1, 2012 13:25:54

vladdv89
Зарегистрирован: 2012-11-25
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Отображение контекстного подменю

Написал программу, которая создает иконку в системном трее и по нажатию на ней правой кнопки мыши показывает контекстное меню из 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()

Офлайн

#2 Дек. 1, 2012 16:16:07

reclosedev
От: Н.Новгород
Зарегистрирован: 2012-03-29
Сообщения: 870
Репутация: +  173  -
Профиль   Отправить e-mail  

Отображение контекстного подменю

Из документации на функцию addMenu

This menu does not take ownership of menu.
Т.е. когда передаешь подменю, родительское меню не берет контроль над ним, и если ссылок на него больше нет, оно удаляется. Решение - создавать меню с явным заданием родителя:
m2 = QtGui.QMenu("Notes", parent=m1)
Еще можно хранить ссылку как атрибут экземпляра или еще где-то, но задание parent - более стандартное решение.

Офлайн

  • Начало
  • » GUI
  • » Отображение контекстного подменю [RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version