Sono un principiante in PyQt. Stavo cercando di creare una semplice app per provare alcune delle numerose funzionalità del toolkit. La mia domanda è, come posso nascondere l'icona dell'app dalla barra delle applicazioni? Non voglio che l'utente sia in grado di vedere l'icona nella barra delle applicazioni e di ridurla usando questa icona. C'è qualche finestra che posso usare per ottenere questo?Nascondi l'app PyQt dalla barra delle applicazioni
risposta
Adattato da 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_())
Non è consigliabile provare a nascondere la presenza della barra delle applicazioni di un'applicazione, soprattutto se l'applicazione è visibile. Se si sta solo cercando di evitare al minimo dalla barra delle applicazioni, allora si può raggiungere questo obiettivo creando il widget di alto livello con i seguenti flag finestra come questa:
QWidget *mainWindow = new QWidget(0, Qt::CustomizeWindowHint
| Qt::WindowTitleHint | Qt::WindowSystemMenuHint
| Qt::WindowCloseButtonHint | Qt::WindowMaximizeButtonHint);
Se non si desidera una bandiera ingrandimento, è possibile lasciare anche quello fuori dalla lista.
I vari flag di finestra che Qt può utilizzare sono documentati here (Qt::WindowFlags).
Questo dovrebbe fare il trucco:
myApp.setWindowFlags(QtCore.Qt.Tool)
Questo mi ha spinto noci per giorni. Completa il codice dell'app da implementare qui sotto.
bit chiave:
- di override CloseEvent(), le consentono di effettuare una delle solo nascondendo finestra o vera uscita
- creare qualche struttura per l'utente di scegliere nascondere o comportamento uscita
- non mostrare() sulla finestra principale di un'istanza, basta exec_() 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_()
Se siete su Ubuntu con Unity e vuole nascondere l'icona di un'applicazione dal lanciatore di sinistra-mano-lato, si avrà probabilmente bisogno Qt.SplashScreen
. Questo ha funzionato per me, ma non ricordo se avevo bisogno anche di Qt.Tool
, che è abbastanza su Windows. Per il tentativo di SplashScreen potrebbe essere necessario reimplementare la funzionalità di ridimensionamento poiché disabilita questa funzionalità di una barra di QStatus (che ha un SizeGrip), ad esempio.
Here è un piccolo esempio per provare i flag delle finestre.
possibile duplicato del [PyQt4 Minimizza al vassoio] (http://stackoverflow.com/questions/758256/pyqt4-minimize-to-tray) – katrielalex
@katrielalex: Penso indica l'icona della barra delle applicazioni e non l'icona della barra delle applicazioni. – user225312
@PulpFiction: sì; il modo in cui "riduci a icona" è nascondere l'icona della barra delle applicazioni e creare un'icona nella barra delle applicazioni. – katrielalex