Seite 1 von 1

Problem mit QSystemTrayIcon

Verfasst: Freitag 11. Februar 2011, 21:58
von Shaldy
Hey nochmal!

Ich möchte in mein Programm auch einen SystremTrayIcon einbetten, und hab dafür folgenden Code geschrieben:

Code: Alles auswählen

class SystemTray(QSystemTrayIcon):

    def __init__(self, parent = None):
        QSystemTrayIcon.__init__(self, parent)
        self.parent = parent
        self.setIcon(QIcon("..\\Res\\WindowIcon.png"))
        tooltip = "xxx"
        if self.parent.connected:
            tooltip += " [Angemeldet"
            if self.parent.secure_mode:
                tooltip += " mit Vollzugriff"
            tooltip += "]"
        self.setToolTip(tooltip)
        self.activated.connect(self.handler)
        QApplication.instance().aboutToQuit.connect(self.hide)

    def handler(self, reason):
        if reason == QSystemTrayIcon.DoubleClick: #Icon double clicked
            if self.parent.isVisible():
                self.parent.hide()
            else:
                self.parent.show()
Funktioniert auch alles, aber wenn ich das Programm starte und anschließend wieder beende bleibt der Icon im Systemtray solange, bis ich einmal mit der Maus darüberfahre. Dann verschwindet er von ganz alleine...
Ist das normal oder mach ich was falsch?

Re: Problem mit QSystemTrayIcon

Verfasst: Freitag 11. Februar 2011, 22:21
von lunar
Ich kenne dieses „Phänomen“ (im Übrigen ein Windows-spezifisches), es entsteht dadurch, dass das Symbol nicht vor dem Ende des Prozesses freigegeben wird. Allerdings leider nicht von Qt, insofern kann ich jetzt nichts allzu zielführendes sagen, und nur raten, eventuell ".aboutToQuit.connect(self.hide)" durch ".aboutToQuit.connect(self.deleteLater)" zu ersetzen.

Dazu noch eine Anmerkung allgemeiner Natur: Binde "parent" bitte nicht an "self.parent". Damit „überschreibst“ Du die Qt-Methode ".parent()", welche Dir das Vaterobjekt zurückgibt. Für andere Qt-Programmierer ist es ziemlich überraschend, wenn ".parent" auf einmal keine Methode, sondern vielmehr ein einfaches Attribut ist. Entferne also bitte die zweite Zeile von ".__init__()", und schreibe "self.parent().connected" oder "self.parent().secure_mode".

Re: Problem mit QSystemTrayIcon

Verfasst: Samstag 12. Februar 2011, 16:23
von Shaldy
Super, danke! Funktioniert tadellos!
Hab auch alle "self.parent"s durch "self.parent()"s ersetzt.