Найти - Пользователи
Полная версия: Отображение контекстного подменю
Начало » GUI » Отображение контекстного подменю
1
vladdv89
Написал программу, которая создает иконку в системном трее и по нажатию на ней правой кнопки мыши показывает контекстное меню из 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()
reclosedev
Из документации на функцию addMenu
This menu does not take ownership of menu.
Т.е. когда передаешь подменю, родительское меню не берет контроль над ним, и если ссылок на него больше нет, оно удаляется. Решение - создавать меню с явным заданием родителя:
m2 = QtGui.QMenu("Notes", parent=m1)
Еще можно хранить ссылку как атрибут экземпляра или еще где-то, но задание parent - более стандартное решение.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB