14 Stimmen

PyQt-Anwendung aus der Taskleiste ausblenden

Ich bin ein Anfänger in PyQt. Ich habe versucht, eine einfache Anwendung zu erstellen, um einige der vielen Funktionen des Toolkits zu testen. Meine Frage ist, wie kann ich das App-Symbol aus der Taskleiste ausblenden? Ich möchte nicht, dass der Benutzer das Symbol in der Taskleiste sieht und es mit diesem Symbol minimieren kann. Gibt es irgendwelche Fensterkennzeichen, die ich verwenden kann, um dies zu erreichen?

14voto

ccpizza Punkte 24937

Damit sollte es klappen:

myApp.setWindowFlags(QtCore.Qt.Tool)

2voto

Das hat mich tagelang verrückt gemacht. Vollständige App-Code zu implementieren unten.

Wichtige Bits:

  • closeEvent() überschreiben, so dass es entweder nur das Fenster ausblenden kann oder echtes Beenden
  • eine Möglichkeit zu schaffen, dass der Benutzer wählen kann, ob er sich verstecken oder Verhalten beenden
  • zeige() nicht das Hauptfenster bei der Instanziierung, sondern nur exec_() die App
import sys
from PyQt4.QtGui import QAction, QApplication, QFrame, QIcon, \
    QMainWindow, QMenu, QSystemTrayIcon
from PyQt4.QtCore import SIGNAL

class MyApp(QMainWindow):
    def __init__(self, parent, title):
        super(QMainWindow, self).__init__(parent)
        self.exitOnClose = False
        exit = QAction(QIcon(), "Exit", self)
        self.connect(exit, SIGNAL("triggered()"), self.exitEvent)
        self.trayIcon = QSystemTrayIcon(QIcon(), self)
        menu = QMenu(self)
        menu.addAction(exit)
        self.trayIcon.setContextMenu(menu)
        self.connect(self.trayIcon, \
            SIGNAL("activated(QSystemTrayIcon::ActivationReason)"), \
            self.trayIconActivated)
        self.trayIcon.show()
        self.trayIcon.showMessage("MyApp is running!", "Click to open window\nRight click for menu" )

    def trayIconActivated(self, reason):
        if reason == QSystemTrayIcon.Context:
            self.trayIcon.contextMenu().show()
        elif reason == QSystemTrayIcon.Trigger:
            self.show()
            self.raise_()

    def closeEvent(self, event):
        if self.exitOnClose:
            self.trayIcon.hide()
            del self.trayIcon
            event.accept()
        else:
            self.hide()
            event.setAccepted(True)
            event.ignore()

    def exitEvent(self):
        self.exitOnClose = True
        self.close()

if __name__ == "__main__":
    app = QApplication(sys.argv)
    myapp = MyApp(None, "My System Tray App")
    app.exec_()

1voto

circuitBurn Punkte 873

Angepasst von dieses Thema :

import sys
from PyQt4.QtGui import *

if __name__ == '__main__':
    app = QApplication(sys.argv)

    widget = QWidget()

    mainWindow = QMainWindow(widget)
    mainWindow.show()

    sys.exit(app.exec_())

0voto

Arnold Spence Punkte 21356

Ich würde nicht empfehlen, das Vorhandensein einer Anwendung in der Taskleiste auszublenden, insbesondere wenn die Anwendung sichtbar ist. Wenn Sie nur versuchen, das Minimieren aus der Taskleiste zu verhindern, können Sie dies erreichen, indem Sie Ihr Top-Level-Widget mit den folgenden Fenster-Flags wie folgt erstellen:

QWidget *mainWindow = new QWidget(0, Qt::CustomizeWindowHint 
    | Qt::WindowTitleHint | Qt::WindowSystemMenuHint 
    | Qt::WindowCloseButtonHint | Qt::WindowMaximizeButtonHint);

Wenn Sie keine Maximalflagge wollen, können Sie diese auch aus der Liste streichen.

Die verschiedenen Fenster-Flags, die Qt verwenden kann, sind dokumentiert hier (Qt::WindowFlags) .

0voto

user2366975 Punkte 3978

Wenn Sie auf Ubuntu mit Unity und das Symbol einer Anwendung aus dem Startmenü auf der linken Seite ausblenden möchten, müssen Sie wahrscheinlich Qt.SplashScreen . Das hat bei mir funktioniert, aber ich weiß nicht mehr, ob ich auch Qt.Tool was unter Windows ausreichend ist. Für den SplashScreen-Versuch müssen Sie möglicherweise die Größenänderungsfunktionalität neu implementieren, da diese Funktion z. B. bei einer QStatusBar (die einen SizeGrip hat) deaktiviert wird.

こちら ist ein kleines Beispiel, um Fensterflags auszuprobieren.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X