2010-10-28 31 views
9

Soy un principiante en PyQt. Estaba intentando crear una aplicación simple para probar algunas de las muchas características del juego de herramientas. Mi pregunta es, ¿cómo puedo ocultar el icono de la aplicación desde la barra de tareas? No deseo que el usuario pueda ver el ícono en la barra de tareas y minimizarlo usando este ícono. ¿Hay algún indicador de ventana que pueda usar para lograr esto?Ocultar la aplicación PyQt de la barra de tareas

+0

posible duplicado de [PyQt4 Minimizar a la bandeja] (http://stackoverflow.com/questions/758256/pyqt4-minimize-to-tray) – katrielalex

+1

@katrielalex Creo él se refiere al ícono de la barra de tareas y no al icono de la bandeja. – user225312

+1

@PulpFiction: sí; la forma en que "minimizar a la bandeja" es ocultar el ícono de la barra de tareas y crear un icono de bandeja. – katrielalex

Respuesta

0

Adaptado 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_()) 
0

No recomendaría tratar de ocultar la presencia de la barra de tareas de una aplicación, especialmente si la aplicación está visible. Si sólo está tratando de prevenir la minimización de la barra de tareas a continuación, se puede lograr esto mediante la creación de su widget de alto nivel con las siguientes banderas ventana como esta:

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

Si no desea que una bandera de maximizar, puede dejar ese de la lista también.

Los diversos indicadores de ventana que puede usar Qt están documentados here (Qt::WindowFlags).

5

Esto debe hacer el truco:

myApp.setWindowFlags(QtCore.Qt.Tool) 
1

Esto me llevó frutos secos por día. Completar el código de la aplicación para implementar a continuación.

bits de clave:

  • CloseEvent anulación(), que le permiten realizar una de simplemente ocultar la ventana o verdadera salida
  • crear alguna facilidad para el usuario elegir entre ocultar o comportamiento salida
  • no mostrar() en la ventana principal de instancias, simplemente exec_() de la aplicación
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_() 
0

Si usted está en Ubuntu con Unity y desea ocultar el icono de una aplicación desde el iniciador de la mano del lado izquierdo, es probable que necesite Qt.SplashScreen. Esto funcionó para mí, pero no recuerdo si también necesitaba Qt.Tool, que es suficiente en Windows. Para el intento de SplashScreen puede que tenga que volver a implementar la funcionalidad de cambio de tamaño ya que deshabilita esta característica de un QStatusBar (que tiene un SizeGrip) por ejemplo.

Here es un pequeño ejemplo para probar los indicadores de ventana.

Cuestiones relacionadas