Exemplo n.º 1
0
 def showMainWindow(self):
     self.mainWindow = MainWindowForm()
     self.mainWindow.setWindowFlags(Qt.FramelessWindowHint | Qt.Tool)
     self.mainWindow.setAttribute(Qt.WA_TranslucentBackground)
     self.mainWindow.setGeometry(self.getWindowPositionRec())
     self.mainWindow.show()
     self.mainWindow.activateWindow()
     self.mainWindow.setFocus()
Exemplo n.º 2
0
class TrayWrapper(QMainWindow):
    activateActionSignal = pyqtSignal()
    def __init__(self, parent=None):
        QMainWindow.__init__(self, parent)
        self.mainWindow = None
        self.platform = sys.platform
        if self.platform == 'darwin':
            self.trayIcon = QSystemTrayIcon(QIcon(":icons/tray/LastVK_monochrome.png"), self)
        else:
            self.trayIcon = QSystemTrayIcon(QIcon(":icons/tray/LastVK.png"), self)
            self.trayIcon.setContextMenu(self.createMenu())
        self.trayIcon.show()
        self.trayIcon.activated.connect(self.triggeredTrayIcon)
        self.activateActionSignal.connect(self.activateActionTriggered)

    @pyqtSlot(QSystemTrayIcon.ActivationReason)
    def triggeredTrayIcon(self, reason):
        if reason == QSystemTrayIcon.Trigger:
            if self.mainWindow and self.mainWindow.isVisible():
                self.mainWindow.close()
            else:
                self.showMainWindow()

    def showMainWindow(self):
        self.mainWindow = MainWindowForm()
        self.mainWindow.setWindowFlags(Qt.FramelessWindowHint | Qt.Tool)
        self.mainWindow.setAttribute(Qt.WA_TranslucentBackground)
        self.mainWindow.setGeometry(self.getWindowPositionRec())
        self.mainWindow.show()
        self.mainWindow.activateWindow()
        self.mainWindow.setFocus()

    def getWindowPositionRec(self):
        trayRect = self.trayIcon.geometry()
        windowRect = self.mainWindow.geometry()
        desktopWidget = QDesktopWidget()
        avaliableRect = desktopWidget.availableGeometry()
        trayOrientation = self.getTrayOrientation()
        if trayOrientation == 'right':
            newPointX = avaliableRect.width() - windowRect.width() - 10
            newPointY = trayRect.center().y() - ( windowRect.height() / 2 )
        elif trayOrientation == 'left':
            newPointX = avaliableRect.x() + 10
            newPointY = trayRect.center().y() - ( windowRect.height() / 2)
        elif trayOrientation == 'down':
            newPointY = trayRect.top() - windowRect.height() - 10
            newPointX = trayRect.center().x() - (windowRect.width() / 2)
            if ( newPointX + windowRect.width() ) > avaliableRect.width():
                newPointX += avaliableRect.width() - ( newPointX + windowRect.width() )
        elif trayOrientation == 'up':
            newPointY = trayRect.bottom() + 10
            newPointX = trayRect.center().x() - (windowRect.width() / 2)
            if ( newPointX + windowRect.width() ) > avaliableRect.width():
                newPointX += avaliableRect.width() - ( newPointX + windowRect.width() )
        else:
            newPointX = avaliableRect.width() - windowRect.width() - 20
            newPointY = avaliableRect.y() + 30
        newPoint = QPoint(newPointX, newPointY)
        newRect = QRect(newPoint, QSize(windowRect.width(), windowRect.height()))
        return newRect

    def getTrayOrientation(self):
        trayRect = self.trayIcon.geometry()
        if trayRect.isEmpty():
            return None
        desktopWidget = QDesktopWidget()
        avaliableRect = desktopWidget.availableGeometry()
        if (avaliableRect.height() - trayRect.y()) < (avaliableRect.height() / 2):
            if trayRect.x() > avaliableRect.width():
                return 'right'
            elif trayRect.x() < avaliableRect.x():
                return 'left'
            else:
                return 'down'
        else:
            return 'up'

    @pyqtSlot()
    def activateActionTriggered(self):
        if not self.mainWindow or not self.mainWindow.isVisible():
            self.showMainWindow()

    @pyqtSlot()
    def activateActionExit(self):
        confirm_exit = QMessageBox.question(self, u'Подтверждение завершения LastVK',
            u"Вы действительно хотите завершить приложение LastVK?",
            QMessageBox.Ok | QMessageBox.Cancel
        )
        if confirm_exit == QMessageBox.Ok:
            qApp.quit()

    def createMenu(self):
        self.trayMenu = QMenu()
        self.activateAction = QAction(u'Открыть', self)
        self.activateAction.triggered.connect(self.activateActionTriggered)
        self.exitAction = QAction(u'Выход', self)
        self.exitAction.triggered.connect(self.activateActionExit)
        self.trayMenu.addAction(self.activateAction)
        self.trayMenu.addAction(self.exitAction)
        return self.trayMenu