2017-07-09 8 views
0

Configuration d'une boîte à outils qui lance différentes applications à partir d'une barre d'état Icône et je dois pouvoir ouvrir la fenêtre de configuration sans la fermer l'ensemble de l'application.Fenêtre contextuelle PyQt de l'icône de la barre d'état qui ne ferme pas le programme lorsque la fenêtre est fermée

import sys 
from PyQt5.QtWidgets import QSystemTrayIcon, QApplication, QMenu, qApp, QMainWindow, QPushButton, QLabel, QLineEdit 
from PyQt5.QtGui import QIcon 
from PyQt5 import QtCore 

class autoparse(): 
    def __init__(self): 
     self.main() 

    def main(self): 
     app = QApplication(sys.argv) 
     self.trayIcon = QSystemTrayIcon(QIcon("icons\icon-windowed.ico"), app) 
     self.menu = QMenu() 
     self.trayIcon.setContextMenu(self.menu) 
     self.autopconfig = self.menu.addAction('Config') 
     self.autopconfig.triggered.connect(self.configwindow) 
     exitaction = self.menu.addAction("Exit") 
     exitaction.triggered.connect(qApp.quit) 

     self.trayIcon.show() 
     sys.exit(app.exec_()) 

    def configwindow(self): 
     try: 
      self.config = QMainWindow() 
      self.config.setWindowTitle('Configuration') 
      self.config.setGeometry(300, 300, 640, 480) 

      self.lbl = QLabel('Directory: ', self.config) 
      self.lbl.setGeometry(QtCore.QRect(10, 20, 200, 20)) 
      self.pathsel = QLineEdit(self.config) 
      self.pathsel.setMaxLength(250) 
      self.pathsel.setText('path here') 
      # self.pathsel.selectAll() 
      self.pathsel.setGeometry(QtCore.QRect(10, 50, 400, 20)) 
      print(self.pathsel.text()) 

      self.btn = QPushButton('...', self.config) 
      self.btn.setGeometry(QtCore.QRect(414, 50, 30, 20)) 
      self.btn.clicked.connect(self.fileselect) 

      self.config.show() 
     except Exception as E: 
      print(E) 
    def fileselect(self): 
     print('hello') 

test1 = autoparse() 

Je suppose la fermeture de l'application entière parce que ma fenêtre pop-up est Qmainwindow() mais la seule autre fenêtre de type pop-up conclusion im sont des fenêtres de dialogue qui sont automatiquement peuplées avec les champs. Peut-être que j'ai besoin de lancer mainwindow lorsque l'icône de la barre d'état se lance, puis masquer() la fenêtre principale? Puis lancer les fenêtres popup avec ça comme parent?

Objectif final: Je souhaite sélectionner des options dans l'icône de la barre d'état système et obtenir les fenêtres correspondant à mes informations configurées. Lorsque quelqu'un clique sur "OK", "enregistrer", "annuler", etc dans l'une de ces fenêtres ou clique sur le X Je ne veux pas qu'il quitte l'application et supprime l'icône de la barre d'état.

+0

Quels sont les "okay", "save", "cancel", je ne les vois pas dans votre application. – eyllanesc

+0

@eyllanesc Je ne les ai pas encore ajouté mais cela soulève une bonne question. Si l'utilisateur clique sur "OK" et que ce bouton exécute une fonction qui enregistre la configuration dans la fenêtre, comment fermer la fenêtre de configuration à la fin de cette fonction? – sidnical

+0

Quel type de fenêtre utiliserez-vous, si vous allez utiliser 'QDialog', je vous recommande d'utiliser la fonction' exec _() 'au lieu d'utiliser show(), cela retournera l'état, et vous pourrez associer les boutons à la tâche de fermer la fenêtre, je recommande de lire sur 'QDialog'. – eyllanesc

Répondre

2

Si vous ne voulez pas que votre application se ferme lorsque vous appuyez sur x ou fermez la vente, vous devez utiliser le setQuitOnLastWindowClosed(False).

def main(self): 
    app = QApplication(sys.argv) 
    QApplication.setQuitOnLastWindowClosed(False) 
    self.trayIcon = QSystemTrayIcon(QIcon("icons\icon-windowed.ico"), app)