PyQt: Afficher le menu dans une application de plateau de système
Tout d'abord, je suis une expérimentée programmeur en C, mais python. Je veux créer une application simple en python à l'aide de pyqt. Imaginons cette application c'est aussi simple que lorsqu'il est exécuté, il doit mettre une icône dans la barre d'état système et il a proposent une option dans le menu pour quitter l'application.
Ce code fonctionne, il affiche le menu (je ne suis pas connecter la sortie de l'action et ainsi de suite pour faire simple)
import sys
from PyQt4 import QtGui
def main():
app = QtGui.QApplication(sys.argv)
trayIcon = QtGui.QSystemTrayIcon(QtGui.QIcon("Bomb.xpm"), app)
menu = QtGui.QMenu()
exitAction = menu.addAction("Exit")
trayIcon.setContextMenu(menu)
trayIcon.show()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
Mais ce n'est pas le cas:
import sys
from PyQt4 import QtGui
class SystemTrayIcon(QtGui.QSystemTrayIcon):
def __init__(self, icon, parent=None):
QtGui.QSystemTrayIcon.__init__(self, icon, parent)
menu = QtGui.QMenu()
exitAction = menu.addAction("Exit")
self.setContextMenu(menu)
def main():
app = QtGui.QApplication(sys.argv)
trayIcon = SystemTrayIcon(QtGui.QIcon("Bomb.xpm"), app)
trayIcon.show()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
J'ai sans doute raté quelque chose. Il n'y a pas d'erreurs mais dans le deuxième cas, quand je clique avec le bouton droit qu'il n'affiche pas le menu.
- Comme un compagnon de programmeur C juste d'entrer dans Python. Je peux dire "errrmmm" aussi.
- Si votre réponse résout le problème, veuillez choisir la communauté wiki copie de votre réponse comme "la" réponse (je ne vais pas faire de la réputation :). J'ai aussi modifié votre réponse à fixer un mineur de faute de frappe.
InformationsquelleAutor Nextorlg | 2009-05-21
Vous devez vous connecter pour publier un commentaire.
Bien, après un peu de débogage, j'ai trouvé le problème. Le QMenu objet, il est détruit après avoir fini
__init__
fonction car il n'a pas un parent. Tandis que le parent d'un QSystemTrayIcon peut être un objet pour le QMenu il doit être un Qwidget. Ce code fonctionne (voir comment QMenu obtient le même parent que le QSystemTrayIcon qui est un QWidget):Je pense que je préférerais le suivant comme il ne semble pas dépendre de QT interne de la collecte des ordures décisions.
Voici le code avec la Sortie d'action mis en œuvre
Ici est la PyQt5 version a été en mesure de mettre en œuvre la Sortie de l'action de démosthène réponse).
Source pour le portage de PyQt4 à PyQt5
Avec un pyqt5 événement connecté:
Je ne pouvais pas obtenir toutes les réponses ci-dessus, pour travailler dans PyQt5 (la sortie dans le système de menu de la barre, ne serait pas réellement de sortie), mais j'ai réussi à combiner pour une solution qui ne fonctionne pas. Je suis encore à essayer de déterminer si exitAction devrait être davantage utilisé en quelque sorte.