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?
Antworten
Zu viele Anzeigen?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_()
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_())
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) .
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.
- See previous answers
- Weitere Antworten anzeigen