I write a class TrayIcon inherit QSystemTrayIcon, why I can't call show() directly after init TrayIcon? TrayIcon().show()

Qt Code:
  1. # It works:
  2. # my_tray_icon = TrayIcon(my_widget)
  3. # my_tray_icon.show()
  4.  
  5. # But why doesn't this work? The icon does not appear in the system tray.
  6. TrayIcon(my_widget).show()
To copy to clipboard, switch view to plain text mode 

Qt Code:
  1. import sys
  2.  
  3. from PySide2.QtGui import QIcon
  4. from PySide2.QtWidgets import QSystemTrayIcon, QAction, QMenu, QApplication, QWidget, qApp
  5.  
  6.  
  7. class TrayIcon(QSystemTrayIcon):
  8. def __init__(self, app):
  9. super().__init__()
  10. self.app = app
  11. self.setIcon(QIcon('icon.png'))
  12. self.activated.connect(self.icon_activated)
  13. self.tray_menu = QMenu(QApplication.desktop())
  14. self.show_action = QAction('&show')
  15. self.quit_action = QAction('&exit')
  16. self.show_action.triggered.connect(app.show)
  17. self.quit_action.triggered.connect(qApp.quit)
  18. self.tray_menu.addAction(self.show_action)
  19. self.tray_menu.addAction(self.quit_action)
  20. self.setContextMenu(self.tray_menu)
  21.  
  22. def icon_activated(self, reason):
  23. if reason in (QSystemTrayIcon.Trigger, QSystemTrayIcon.DoubleClick):
  24. self.app.show()
  25. # for Windows
  26. self.app.activateWindow()
  27. # for macOS
  28. self.app.raise_()
  29.  
  30.  
  31. def main():
  32. app = QApplication(sys.argv)
  33. app.setQuitOnLastWindowClosed(False)
  34. my_widget = QWidget()
  35.  
  36. # It works:
  37. # my_tray_icon = TrayIcon(my_widget)
  38. # my_tray_icon.show()
  39.  
  40. # But why doesn't this work?
  41. TrayIcon(my_widget).show()
  42.  
  43. sys.exit(app.exec_())
  44.  
  45.  
  46. if __name__ == '__main__':
  47. main()
To copy to clipboard, switch view to plain text mode