Всплывающее окно PyQt из иконки в трее, которое не закрывает программу при закрытии окна

Настройка инструментария, который запускает различные приложения из трея Icon, и мне нужно иметь возможность открывать окно конфигурации, а затем закрывать его, не закрывая все приложение.

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()

Я предполагаю, что оно закрывает все приложение, потому что мое всплывающее окно Qmainwindow() но единственные другие всплывающие окна, которые я нашел, - это диалоговые окна, которые автоматически заполняются полями. Может быть, мне нужно запустить mainwindow при запуске иконки в трее, а затем скрыть () главное окно? Затем запустите всплывающие окна с этим в качестве родителя?

Конечная цель: я хочу выбрать опции на иконке в трее и получить окна, которые соответствуют моей сконфигурированной информации. Когда кто-то нажимает "окей", "сохранить", "отменить" и т. Д. В одном из этих окон или щелкает X I, он не хочет, чтобы он выходил из приложения и удалял значок в трее.

1 ответ

Решение

Если вы не хотите, чтобы ваше приложение закрывалось, когда вы нажимаете x или закрываете продажу, вы должны использовать setQuitOnLastWindowClosed(False),

def main(self):
    app = QApplication(sys.argv)
    QApplication.setQuitOnLastWindowClosed(False)
    self.trayIcon = QSystemTrayIcon(QIcon("icons\icon-windowed.ico"), app)
Другие вопросы по тегам