Je suis débutant en PyQt. J'essayais de créer une application simple pour essayer quelques-unes des nombreuses fonctionnalités de la boîte à outils. Ma question est, comment puis-je cacher l'icône de l'application de la barre des tâches? Je ne veux pas que l'utilisateur puisse voir l'icône dans la barre des tâches et la réduire en utilisant cette icône. Y at-il des indicateurs de fenêtre que je peux utiliser pour y parvenir?Masquer l'application PyQt de la barre des tâches
Répondre
Adapté de this thread:
import sys
from PyQt4.QtGui import *
if __name__ == '__main__':
app = QApplication(sys.argv)
widget = QWidget()
mainWindow = QMainWindow(widget)
mainWindow.show()
sys.exit(app.exec_())
Je ne recommanderais pas d'essayer de masquer la présence d'une barre des tâches d'une application, en particulier si l'application est visible. Si vous essayez seulement d'éviter de minimiser la barre des tâches, vous pouvez y parvenir en créant votre widget de haut niveau avec les drapeaux de fenêtre suivante comme ceci:
QWidget *mainWindow = new QWidget(0, Qt::CustomizeWindowHint
| Qt::WindowTitleHint | Qt::WindowSystemMenuHint
| Qt::WindowCloseButtonHint | Qt::WindowMaximizeButtonHint);
Si vous ne voulez pas un drapeau maximize, vous pouvez laisser celui-là aussi sur la liste.
Les différents indicateurs de fenêtre que Qt peut utiliser sont documentés here (Qt::WindowFlags).
Cela devrait faire l'affaire:
myApp.setWindowFlags(QtCore.Qt.Tool)
Cela me ont rendu fou pendant des jours. Compléter le code de l'application pour mettre en œuvre ci-dessous
bits de clé:
- override closeEvent(), lui permettant de le faire, soit de simplement cacher la fenêtre ou vraie sortie
- créer une installation pour l'utilisateur de choisir masquer ou comportement de sortie
- ne montrent pas() fenêtre principale sur instanciation, juste exec_() l'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_()
Si vous êtes sur Ubuntu avec Unity et que vous voulez cacher le lanceur sur la main gauche de l'icône d'une application, vous aurez probablement besoin Qt.SplashScreen
. Cela a fonctionné pour moi mais je ne me souviens pas si j'avais aussi besoin de Qt.Tool
, ce qui est suffisant sur Windows. Pour la tentative SplashScreen, vous devrez peut-être réimplémenter la fonctionnalité de redimensionnement car elle désactive cette fonctionnalité d'un QStatusBar (qui a un SizeGrip) par exemple.
Here est un petit exemple pour essayer les drapeaux de fenêtre.
double possible de [PyQt4 Réduire dans la barre] (http://stackoverflow.com/questions/758256/pyqt4-minimize-to-tray) – katrielalex
@katrielalex: Je pense il signifie l'icône de la barre des tâches et non l'icône de la barre d'état. – user225312
@PulpFiction: oui; la façon dont vous "réduisez au plateau" est de cacher l'icône de la barre des tâches et de créer une icône de plateau. – katrielalex