Форум сайта python.su
Доброго времени суток!
Такая проблема возникла:
Есть класс трей иконки
from PyQt5.QtWidgets import * from PyQt5.QtGui import * class SystemTrayIcon(QSystemTrayIcon): def __init__(self, parent=None): QSystemTrayIcon.__init__(self, parent) # создаем трей иконку self.setObjectName('trayIcon') self.setIcon(QIcon(".data/img/Application-icon-wob.png")) self.activated.connect(self.onTrayIconActivated) self.installEventFilter(self) self.show() def onTrayIconActivated(self, event): if event == QSystemTrayIcon.DoubleClick: pass elif event == QSystemTrayIcon.Context: qApp.quit()
from PyQt5.QtWidgets import * from PyQt5.QtCore import * from PyQt5.QtMultimedia import * from PyQt5.QtGui import * from functions.main_funcs import (getScreen) import configparser import webbrowser class ProfileForm(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): self.setWindowFlags(Qt.FramelessWindowHint | Qt.Tool) # окно без рамок и заголовка, не отображается на панели задач self.setAttribute(Qt.WA_TranslucentBackground) # прозрачный бек окна self.setFixedSize(330, 220) self.setObjectName('ProfileForm') QFontDatabase.addApplicationFont(".data/fonts/Micra_Normal.ttf") self.config = configparser.ConfigParser() self.config.read('config.ini') # тут много дальше всего не суть важно... # показываем окно self.show() def close(self): self.hide()
from os import * from forms.profile_form import ProfileForm from forms.systray import SystemTrayIcon from functions.main_funcs import * import sys if __name__ == '__main__': pid = getpid() # запись процесса # проверяем наличие конфига и создаем если его нет if path.exists('config.ini') == False: createConfig() # Создаем приложение app = QApplication(sys.argv) # Загружаем форму профиля ProfileForm = ProfileForm() # Загружаем трей иконку tray = SystemTrayIcon() # Выполняем запуск приложения sys.exit(app.exec_())
def onTrayIconActivated(self, event): if event == QSystemTrayIcon.DoubleClick: pass
if event == QSystemTrayIcon.DoubleClick: global ProfileForm ProfileForm.close()
from PyQt5.QtWidgets import * from PyQt5.QtGui import * from forms.profile_form import ProfileForm class SystemTrayIcon(QSystemTrayIcon,ProfileForm): def __init__(self, parent=None): QSystemTrayIcon.__init__(self, parent) # создаем трей иконку self.setObjectName('trayIcon') self.setIcon(QIcon(".data/img/Application-icon-wob.png")) self.activated.connect(self.onTrayIconActivated) self.installEventFilter(self) self.show() def onTrayIconActivated(self, event): if event == QSystemTrayIcon.DoubleClick: ProfileForm.close() elif event == QSystemTrayIcon.Context: qApp.quit()
Офлайн
пример для PyQt4 , для пятого должно легко переделываться
нужно закрыть предварительно все окна.
import sys from PyQt4 import QtGui from PyQt4 import QtCore import win32gui #не обязательно нужно чтобы выдрать иконку с shell32.dll class SystemTrayIcon(QtGui.QSystemTrayIcon): def __init__(self, mainWindow, parent=None): super().__init__(parent) # создаем трей иконку self.setObjectName('trayIcon') # получаем иконку в виде звездочки из shell32.dll fname = 'c:\\windows\\system32\\shell32.dll' hicon = win32gui.ExtractIcon(0, fname, 43) pixmap = QtGui.QPixmap.fromWinHICON(hicon) win32gui.DestroyIcon(hicon) self.setIcon(QtGui.QIcon(pixmap)) self.mainWindow = mainWindow self.activated.connect(self.onTrayIconActivated) self.show() def onTrayIconActivated(self, reason): if reason == QtGui.QSystemTrayIcon.DoubleClick: # Дабл-клик показать/скрыть главное окно self.mainWindow.toggle() elif reason == QtGui.QSystemTrayIcon.Context: # ПКМ - все закрыть и выйти self.hide() self.mainWindow.close() # закрываем главное окно QtGui.qApp.closeAllWindows() # на всякий случай :) закрыть все окна QtGui.qApp.quit() # выход class MainWindow(QtGui.QWidget): # Главное окно программы, ничего не делает. прочто для примера def __init__(self, parent=None): super().__init__(parent) self.show() def toggle(self): if self.isHidden(): self.show() self.activateWindow() else: self.hide() if __name__ == '__main__': app = QtGui.QApplication(sys.argv) app.setQuitOnLastWindowClosed(False) # не завершать QApplication при закрытиии последнего окна mainWindow = MainWindow() trayIcon = SystemTrayIcon(mainWindow) sys.exit(app.exec_())
[code python][/code]
Отредактировано PEHDOM (Июнь 4, 2017 20:11:48)
Офлайн