Ejemplo n.º 1
0
class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        maxWidth = QDesktopWidget().availableGeometry().width()
        maxHeight = QDesktopWidget().availableGeometry().height()
        workSpace = QWidget(self)

        ####    MainWindow Configuration
        self.setWindowTitle("Application")
        self.setWindowIcon(QIcon("icon.png"))

        self.tray_icon = QSystemTrayIcon(QIcon("icon.png"))
        self.tray_icon.show()

        ####    Tray MENU   #################
        trayIconMenu = QMenu(self)
        trayIconMenu.setTitle("Main menu")
        trayIconMenu.addAction("Show Main Window", self.showMainWindow)
        trayIconMenu.addAction("Switch chat", self.toggleDockWidget)
        trayIconMenu.addSeparator()
        trayIconMenu.addAction("Quit", self.close)
        self.tray_icon.setContextMenu(trayIconMenu)

        ######################################

        ####     MENUBAR description:    #################
        mainmenu = self.menuBar()
        file = mainmenu.addMenu("File")
        file.addAction("isFloating", self.floatingInfo)
        file.addAction("Toggle Chat", self.toggleDockWidget)
        file.addAction("Close", self.close)
        ######################

        self.dockWidget = QDockWidget("Messenger", self)
        self.dockWidget.setFloating(True)
        self.dockWidget.setVisible(True)
        self.dockWidget.setMinimumSize(300, 460)
        self.dockWidget.setMaximumSize(maxWidth / 2, maxHeight)
        self.dockWidget.setBaseSize(maxWidth / 2, maxHeight)
        self.dockWidget.resize(maxWidth / 4, maxHeight / 1.5)
        self.dockWidget.setFeatures(QDockWidget.NoDockWidgetFeatures)
        self.dockWidget.setVisible(False)

        ####    TODO:" set dockWidget widgets"      ################

        messengerWidget = QWidget()

        masterVertical = QVBoxLayout()
        messengerWidget.setLayout(masterVertical)

        slaveHorizont = QHBoxLayout()
        subSlaveVertical = QVBoxLayout()

        msgSpace = QListView()
        textEdit = QTextEdit()
        sendBtn = QPushButton("Send")

        masterVertical.addWidget(msgSpace)
        masterVertical.addLayout(slaveHorizont)

        slaveHorizont.addWidget(textEdit)
        slaveHorizont.addLayout(subSlaveVertical)

        subSlaveVertical.addWidget(sendBtn)

        # self.dockWidget.setLayout(QVBoxLayout())
        # print(self.dockWidget.setLayout(QVBoxLayout()))

        ############################################################

        # self.statusBar()

        toggleDockWidgetBtn = QPushButton("Show geomerty", workSpace)
        toggleDockWidgetBtn.move(10, 40)
        toggleDockWidgetBtn.clicked.connect(self.showGeometry)

        ####     TEST BUTONS     ####
        hideBtn = QPushButton("hide main", workSpace)
        hideBtn.move(10, 70)
        hideBtn.clicked.connect(self.hideMainWindow)
        #######################################################

        self.setGeometry(300, 300, 300, 500)
        self.dockWidget.resize(333, 1000)
        self.setCentralWidget(workSpace)
        self.addDockWidget(Qt.RightDockWidgetArea, self.dockWidget)

    def toggleDockWidget(self):
        flag = False if self.dockWidget.isVisible() else True
        text = "Messenger status was changed to {}".format(
            "visible" if flag else "hide")
        self.dockWidget.setVisible(flag)

        # self.dockWidget.setGeometry(650, 300, 200, 500)

        ####     SET DOCKWINDOW GEAMETRY AND POSITION
        qtRect = self.dockWidget.frameGeometry()
        rightPoint = QDesktopWidget().availableGeometry().bottomRight()

        ####    FOR LINUX POSITION    ###############################
        # qtRect.moveBottomRight(rightPoint)
        # self.dockWidget.move(qtRect.bottomRight())
        ####    FOR WINDOWS POSITION    #############################
        qtRect.moveBottomRight(rightPoint)
        self.dockWidget.move(qtRect.topLeft())
        ##############################################################

        self.statusBar().showMessage(text, 500)

    ####    test functionality
    def showGeometry(self):
        availGeometry = QDesktopWidget().availableGeometry()
        self.statusBar().showMessage("Available geometry.")
        print("Available geometry: ", availGeometry)
        print("Right point: ",
              QDesktopWidget().availableGeometry().bottomRight())
        print("DockWidget frame bottomRight: ",
              self.dockWidget.frameGeometry().bottomRight())
        print("DockWidget frame topLeft: ",
              self.dockWidget.frameGeometry().topLeft())
        print("\n" + "|---|" * 15 + "\n")

    def hideMainWindow(self):
        self.hide()

    def showMainWindow(self):
        self.show()

    def floatingInfo(self):
        flag = False if self.dockWidget.isFloating() else True
        print("dockWidget status is: ", flag)
        self.dockWidget.setFloating(flag)