设置一个工具包,从托盘启动不同的应用程序图标,我需要能够打开配置窗口,然后关闭它而不关闭整个应用程序。
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()
,但我发现的唯一其他弹出窗口类型是自动填充字段的对话框窗口。也许我需要在托盘图标启动时启动主窗口,然后隐藏()主窗口?然后启动弹出窗口作为父窗口?
结束目标:我想从托盘图标中选择选项,并获取提供我配置信息的窗口。当有人在其中一个窗口中单击“正常”,“保存”,“取消”等或单击X时,我不希望它退出应用程序并删除托盘图标。
答案 0 :(得分:3)
如果您不希望在按x或关闭促销时关闭应用,则必须使用setQuitOnLastWindowClosed(False)
。
def main(self):
app = QApplication(sys.argv)
QApplication.setQuitOnLastWindowClosed(False)
self.trayIcon = QSystemTrayIcon(QIcon("icons\icon-windowed.ico"), app)