コード例 #1
0
ファイル: window.py プロジェクト: tomashruska1/musicplayer
    def __init__(self, control, screens: list) -> None:
        super().__init__(flags=Qt.FramelessWindowHint)
        self.setWindowTitle("My player")
        self.control = control
        self.mainWidget = MainWidget(self.control, self, screens)
        color = QPalette()
        color.setColor(QPalette.Background, QColor(20, 20, 20))
        self.setPalette(color)
        self.setCentralWidget(self.mainWidget)
        self.menuBar = self.mainWidget.menus
        self.setMinimumSize(1000, 800)
        self.setFocusPolicy(Qt.StrongFocus)
        self.setMouseTracking(True)

        self.timer = QTimer()
        self.timer.setInterval(200)
        self.timer.timeout.connect(self.getMousePos)
        self.timer.start()

        self.move((screens[0].geometry().width() - self.width()) // 2,
                  (screens[0].geometry().height() - self.height()) // 2)

        self.right = self.left = self.up = self.down = False
        self.start = QPoint(0, 0)
        self.gripSize = 10
        self.grips = []
        self.pressedForMenuBar = False
        for i in range(4):
            grip = QSizeGrip(self)
            grip.setStyleSheet("background-color: transparent")
            grip.resize(self.gripSize, self.gripSize)
            self.grips.append(grip)
コード例 #2
0
class MainWindow(QWidget):
    def __init__(self):
        QWidget.__init__(self)
        self.ui = Ui_Form()
        self.ui.setupUi(self)
        self.ui.retranslateUi(self)
        self.uiDefinitions()
        self.startUpValues(loadFromRegistry())
        self.buttonFunctions()
        self.show()

        ####################################
        # UI Design and Mouse Click Events #
        ####################################

        # Move Window
        def moveWindow(event):
            # Restore before move
            if GLOBAL_STATE == 1:
                self.maximize_restore()

            # If left click, move window
            if event.buttons() == Qt.LeftButton:
                self.move(self.pos() + event.globalPos() - self.dragPos)
                self.dragPos = event.globalPos()
                event.accept()

        # Set Title Bar (This is where you click to move window)
        self.ui.frame_top.mouseMoveEvent = moveWindow

    def mousePressEvent(self, event):
        self.dragPos = event.globalPos()

    def uiDefinitions(self):
        # Remove Title Bar
        self.setWindowFlag(QtCore.Qt.FramelessWindowHint)
        self.setAttribute(QtCore.Qt.WA_TranslucentBackground)

        # Set Drop Shadow Window
        self.shadow = QGraphicsDropShadowEffect(self)
        self.shadow.setBlurRadius(20)
        self.shadow.setXOffset(0)
        self.shadow.setYOffset(0)
        self.shadow.setColor(QColor(0, 0, 0, 100))

        # Apply Drop Shadow Frame
        self.ui.frame_background.setGraphicsEffect(self.shadow)

        # Maximize / Restore
        self.ui.btn_maximize.clicked.connect(lambda: self.maximize_restore())

        # Minimize
        self.ui.btn_minimize.clicked.connect(lambda: self.showMinimized())

        # Close
        self.ui.btn_close.clicked.connect(lambda: self.close())

        # Create size grip to resize window
        self.sizegrip = QSizeGrip(self.ui.frame_grip)
        self.sizegrip.setStyleSheet(
            "QSizeGrip { width: 10px; height: 10px; margin: 5px } QSizeGrip:hover { background-color: rgb(50, 42, 94) }"
        )

    def maximize_restore(self):
        global GLOBAL_STATE
        status = GLOBAL_STATE

        # IF NOT MAXIMIZED
        if status == 0:
            GLOBAL_STATE = 1
            self.showMaximized()
        else:
            GLOBAL_STATE = 0
            self.showNormal()

    ########################################
    # Start Up Values and Button Functions #
    ########################################

    # Start Up Values
    def startUpValues(self, registry):

        # Initiate test date from registry
        self.ui.lineEdit_testDate.setText(registry['testDate'])

        # Initiate Questions Complete from registry
        self.ui.lineEdit_questionsComplete.setText(
            registry['questionsComplete'])

        # Initiate Questions Total from registry
        self.ui.lineEdit_totalQuestions.setText(registry['totalQuestions'])

        # Set Days Until Test
        self.testDateEdited(self.ui.lineEdit_testDate.text())

        # Set Questions Remaining, Questions Complete, and Questions per Day
        self.questionsCompleteEdited(self.ui.lineEdit_questionsComplete.text())

        # Set the Date
        self.ui.label_todaysDateEdit.setText(self.getTodaysDate())

    # Button Actions
    def buttonFunctions(self):

        # Change test Date
        self.ui.lineEdit_testDate.textChanged.connect(self.testDateEdited)

        # Change questions completed
        self.ui.lineEdit_questionsComplete.textChanged.connect(
            self.questionsCompleteEdited)

        # Change Total Questions
        self.ui.lineEdit_totalQuestions.textChanged.connect(
            self.totalQuestionsEdited)

    # Get Today's Date
    def getTodaysDate(self):
        today = date.today()
        return today.strftime("%m/%d/%Y")

    # Test Date edited
    def testDateEdited(self, testDate):
        # Test Date
        # Use try/except statement to check for valid
        try:
            testDate = datetime.datetime.strptime(testDate, '%m/%d/%Y')
        except:
            return

        julianTestDate = testDate.timetuple()

        # Today's Date
        today = date.today()
        julianToday = today.timetuple()

        # Check if test crosses the 1-Year mark (Not going to account for leap-years)
        julianTestDate = (julianTestDate.tm_year -
                          julianToday.tm_year) * 365 + julianTestDate.tm_yday
        julianToday = julianToday.tm_yday

        # Days until test
        DaysUntilTest = julianTestDate - julianToday
        self.ui.label_daysUntilTestEdit.setText(str(DaysUntilTest))

        # Questions per Day
        questionsComplete = int(self.ui.lineEdit_questionsComplete.text())
        totalQuestions = int(self.ui.lineEdit_totalQuestions.text())

        # Calculate Julian Date if the date does not equal todays date.  Otherwise, return 0
        if julianTestDate != julianToday:
            self.ui.label_questionsPerDayEdit.setText(
                str((totalQuestions - questionsComplete) //
                    int(self.ui.label_daysUntilTestEdit.text())))
        else:
            self.ui.label_questionsPerDayEdit.setText(
                str(totalQuestions - questionsComplete))

        # Registry
        saveToRegistry('testDate', self.ui.lineEdit_testDate.text())

    # Questions Complete Change
    def questionsCompleteEdited(self, questionsComplete):
        # Check if questions completed is an integer
        try:
            questionsComplete = int(questionsComplete)
        except:
            return

        totalQuestions = int(self.ui.lineEdit_totalQuestions.text())

        # Set Questions remaining and Percent Complete labels
        self.ui.label_questionsRemainingEdit.setText(
            str(totalQuestions - questionsComplete))
        self.ui.label_questionsCompleteEdit.setText(
            str(round(questionsComplete / totalQuestions * 100, 1)) + "%")
        self.ui.label_questionsPerDayEdit.setText(
            str(
                round((totalQuestions - questionsComplete) /
                      int(self.ui.label_daysUntilTestEdit.text()), 1)))

        # Registry
        saveToRegistry('questionsComplete',
                       self.ui.lineEdit_questionsComplete.text())

    # Questions Complete Change
    def totalQuestionsEdited(self, totalQuestions):
        # Check if questions completed is an integer
        try:
            totalQuestions = int(totalQuestions)
        except:
            return

        questionsComplete = int(self.ui.lineEdit_questionsComplete.text())

        # Set Questions remaining and Percent Complete labels
        self.ui.label_questionsRemainingEdit.setText(
            str(totalQuestions - questionsComplete))
        self.ui.label_questionsCompleteEdit.setText(
            str(round(questionsComplete / totalQuestions * 100, 1)) + "%")
        self.ui.label_questionsPerDayEdit.setText(
            str(
                round((totalQuestions - questionsComplete) /
                      int(self.ui.label_daysUntilTestEdit.text()), 1)))

        # Registry
        saveToRegistry('totalQuestions',
                       self.ui.lineEdit_totalQuestions.text())
コード例 #3
0
class MainWindow(QMainWindow):
    def __init__(self):
        QMainWindow.__init__(self)
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)

        self.text = ""

        ## WINDOW SIZE ==> Varsayılan ekran boyutları
        startSize = QSize(500, 600)
        self.resize(startSize)
        self.setMinimumSize(startSize)

        ##  LOAD DEFINITIONS ==> Arayüz dışındaki çerçevenin kaldırılması
        ########################################################################
        self.uiDefinitions()
        ## ==> END ##

        ## CLİCKED BUTTON ==> Arayüzdeki butonlara basılması durumları
        self.ui.pushButton.clicked.connect(self.Button)
        self.ui.pushButton_2.clicked.connect(self.Button)
        self.ui.pushButton_3.clicked.connect(self.Button)
        self.ui.pushButton_4.clicked.connect(self.Button)
        self.ui.pushButton_5.clicked.connect(self.Button)
        self.ui.pushButton_6.clicked.connect(self.Button)
        self.ui.pushButton_7.clicked.connect(self.Button)
        self.ui.pushButton_8.clicked.connect(self.Button)
        self.ui.pushButton_9.clicked.connect(self.Button)
        self.ui.pushButton_10.clicked.connect(self.Button)
        self.ui.pushButton_11.clicked.connect(self.Button)
        self.ui.pushButton_12.clicked.connect(self.Button)
        self.ui.pushButton_13.clicked.connect(self.Button)
        self.ui.pushButton_14.clicked.connect(self.Button)
        self.ui.pushButton_15.clicked.connect(self.Button)
        self.ui.pushButton_16.clicked.connect(self.Button)
        self.ui.pushButton_17.clicked.connect(self.Button)
        self.ui.pushButton_18.clicked.connect(self.Button)
        self.ui.pushButton_19.clicked.connect(self.Button)
        self.ui.pushButton_20.clicked.connect(self.Button)
        ## ==> END ##

        ## SHOW ==> Arayüz gösterme
        ########################################################################
        self.show()

    ## ==> END ##

    ## TRANSACTİON ==> Sonuç üretme
    ########################################################################

    def islem(self):
        if not self.text:
            pass
        else:
            try:
                float(self.text)

                self.ui.label_2.setText(self.text)
            except ValueError:
                if "*" in self.text:
                    a = self.text.replace(",", ".").split("*")
                    self.ui.label_2.setText(str(float(a[0]) * float(a[1])))
                elif "/" in self.text:
                    a = self.text.replace(",", ".").split("/")
                    self.ui.label_2.setText(str(float(a[0]) / float(a[1])))

                elif "+" in self.text:
                    a = self.text.replace(",", ".").split("+")
                    self.ui.label_2.setText(str(float(a[0]) + float(a[1])))
                elif "-" in self.text:
                    a = self.text.replace(",", ".").split("-")
                    self.ui.label_2.setText(str(float(a[0]) - float(a[1])))

        ## ==> END ##

    ## MENUS ==> Butonlara basılma durumları
    ########################################################################
    def Button(self):
        # GET BT CLICKED ==> Hangi butona basıldığını bulma
        btnWidget = self.sender()

        if btnWidget.text() == "AC":
            self.text = ""
            self.ui.label_2.setText("0")
        elif btnWidget.text() == "=":
            self.islem()
        elif btnWidget.text() == "+/-":
            a = float(self.text.replace(",", "."))
            a *= -1
            self.text = str(a)

        else:
            self.text += btnWidget.text()

        self.ui.label.setText(self.text)

    ## ==> END ##

    ## EVENT ==> Klavye üzerindeki butonlar ile işlem yapma
    ########################################################################

    def keyPressEvent(self, event):
        if str(event.key()) == "16777220":
            self.islem()
        elif str(event.key()) == "16777219":
            self.text = self.text[:-1]
            self.ui.label.setText(self.text)
        else:
            self.text += str(event.text())
            self.ui.label.setText(self.text)

    ## ==> END ##

    ##MAXIMIZE/RESTORE ==> Tam ekran yapma
    ########################################################################
    def maximize_restore(self):
        global GLOBAL_STATE
        status = GLOBAL_STATE
        if status == 0:
            self.showMaximized()
            GLOBAL_STATE = 1
            self.ui.horizontalLayout.setContentsMargins(0, 0, 0, 0)
            self.ui.btn_maximize_restore.setToolTip("Restore")
            self.ui.btn_maximize_restore.setIcon(
                QtGui.QIcon(u":/16x16/icons/16x16/cil-window-restore.png"))
            self.ui.frame_top_btns.setStyleSheet(
                "background-color: rgb(27, 29, 35)")
            self.ui.frame_size_grip.hide()
        else:
            GLOBAL_STATE = 0
            self.showNormal()
            self.resize(self.width() + 1, self.height() + 1)
            self.ui.horizontalLayout.setContentsMargins(10, 10, 10, 10)
            self.ui.btn_maximize_restore.setToolTip("Maximize")
            self.ui.btn_maximize_restore.setIcon(
                QtGui.QIcon(u":/16x16/icons/16x16/cil-window-maximize.png"))
            self.ui.frame_top_btns.setStyleSheet(
                "background-color: rgba(27, 29, 35, 200)")
            self.ui.frame_size_grip.show()

    ## UI DEFINITIONS==> Arayüz ve üzerindeki butonlarla ilgili işlemler
    ########################################################################
    def uiDefinitions(self):
        def dobleClickMaximizeRestore(event):
            # IF DOUBLE CLICK CHANGE STATUS ==> Üst kısıma 2 kere basıldığında tam ekran yapma
            if event.type() == QtCore.QEvent.MouseButtonDblClick:
                QtCore.QTimer.singleShot(250, lambda: self.maximize_restore())

        ## REMOVE ==> STANDARD TITLE BAR ==> standart ekran boyutu
        if GLOBAL_TITLE_BAR:
            self.setWindowFlags(QtCore.Qt.FramelessWindowHint)
            self.setAttribute(QtCore.Qt.WA_TranslucentBackground)
            self.ui.frame_label_top_btns.mouseDoubleClickEvent = dobleClickMaximizeRestore
        else:
            self.ui.horizontalLayout.setContentsMargins(0, 0, 0, 0)
            self.ui.frame_label_top_btns.setContentsMargins(8, 0, 0, 5)
            self.ui.frame_label_top_btns.setMinimumHeight(42)
            self.ui.frame_icon_top_bar.hide()
            self.ui.frame_btns_right.hide()
            self.ui.frame_size_grip.hide()

        ## SHOW ==> DROP SHADOW ==> gölge düşürme
        self.shadow = QGraphicsDropShadowEffect(self)
        self.shadow.setBlurRadius(17)
        self.shadow.setXOffset(0)
        self.shadow.setYOffset(0)
        self.shadow.setColor(QColor(0, 0, 0, 150))
        self.ui.frame_main.setGraphicsEffect(self.shadow)

        ## ==> RESIZE WINDOW ==>Ana Ekran Boyutlandırma
        self.sizegrip = QSizeGrip(self.ui.frame_size_grip)
        self.sizegrip.setStyleSheet(
            "width: 20px; height: 20px; margin 0px; padding: 0px;")

        ### ==> MINIMIZE ==> Minumum butonuna basıldığında
        self.ui.btn_minimize.clicked.connect(lambda: self.showMinimized())

        ## ==> MAXIMIZE/RESTORE ==> Maximum butonuna basıldığında
        self.ui.btn_maximize_restore.clicked.connect(
            lambda: self.maximize_restore())

        ## SHOW ==> CLOSE APPLICATION ==> Kapatma butonuna basıldığında
        self.ui.btn_close.clicked.connect(lambda: self.close())
コード例 #4
0
ファイル: main_window.py プロジェクト: ReisTom/Architecture
class Ui_MainWindow(QMainWindow):
    def __init__(self, controller):

        super().__init__()

        self.main_controller = controller

        # create and setup Window from Ui_MainWindow Model

        self.setupUi(self)

        # set startsize and minimum size
        start_size = QSize(1000, 720)
        self.dragPos = QtCore.QPoint(300, 25)

        self.resize(start_size)
        self.setMinimumSize(start_size)

        # set flags to the window
        flags = QtCore.Qt.WindowFlags(QtCore.Qt.FramelessWindowHint)
        self.setWindowFlags(flags)

        # connenct the buttons
        self.btn_close.clicked.connect(lambda: self.close())
        self.btn_maximise_restore.clicked.connect(
            lambda: self.main_controller.change_window_format())
        self.btn_minimize.clicked.connect(lambda: self.minimize())
        self.btn_tgl_menu.clicked.connect(lambda: self.change_sidemenu())

        #create function that handles window_drag events
        def move_window(event):
            self.main_controller.on_drag_window()

            if event.buttons() == Qt.LeftButton:
                self.move(self.pos() + event.globalPos() - self.dragPos)
                self.dragPos = event.globalPos()
                event.accept()

        self.frame_header_top.mouseMoveEvent = move_window

        #connect frame to sizegrip
        self.sizegrip = QSizeGrip(self.frame_size_grip)
        self.sizegrip.setStyleSheet(
            "width: 20px; height: 20px; margin 0px; padding: 0px;")

        # SHOW ==> MAIN WINDOW
        self.show()

    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(887, 791)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.verticalLayout = QtWidgets.QVBoxLayout(self.centralwidget)
        self.verticalLayout.setContentsMargins(0, 0, 0, 0)
        self.verticalLayout.setSpacing(6)
        self.verticalLayout.setObjectName("verticalLayout")
        self.frame_main = QtWidgets.QFrame(self.centralwidget)
        self.frame_main.setFrameShape(QtWidgets.QFrame.NoFrame)
        self.frame_main.setFrameShadow(QtWidgets.QFrame.Raised)
        self.frame_main.setObjectName("frame_main")
        self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.frame_main)
        self.verticalLayout_2.setContentsMargins(0, 0, 0, 0)
        self.verticalLayout_2.setSpacing(0)
        self.verticalLayout_2.setObjectName("verticalLayout_2")
        self.frame_header = QtWidgets.QFrame(self.frame_main)
        self.frame_header.setMinimumSize(QtCore.QSize(0, 70))
        self.frame_header.setMaximumSize(QtCore.QSize(16777215, 70))
        self.frame_header.setFrameShape(QtWidgets.QFrame.NoFrame)
        self.frame_header.setFrameShadow(QtWidgets.QFrame.Raised)
        self.frame_header.setLineWidth(0)
        self.frame_header.setObjectName("frame_header")
        self.horizontalLayout_2 = QtWidgets.QHBoxLayout(self.frame_header)
        self.horizontalLayout_2.setContentsMargins(0, 0, 0, 0)
        self.horizontalLayout_2.setSpacing(0)
        self.horizontalLayout_2.setObjectName("horizontalLayout_2")
        self.frame_toogle = QtWidgets.QFrame(self.frame_header)
        self.frame_toogle.setMaximumSize(QtCore.QSize(70, 16777215))
        self.frame_toogle.setFrameShape(QtWidgets.QFrame.NoFrame)
        self.frame_toogle.setFrameShadow(QtWidgets.QFrame.Raised)
        self.frame_toogle.setLineWidth(1)
        self.frame_toogle.setMidLineWidth(1)
        self.frame_toogle.setObjectName("frame_toogle")
        self.horizontalLayout_3 = QtWidgets.QHBoxLayout(self.frame_toogle)
        self.horizontalLayout_3.setContentsMargins(0, 0, 0, 0)
        self.horizontalLayout_3.setSpacing(0)
        self.horizontalLayout_3.setObjectName("horizontalLayout_3")
        self.btn_tgl_menu = QtWidgets.QPushButton(self.frame_toogle)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding,
                                           QtWidgets.QSizePolicy.Expanding)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(
            self.btn_tgl_menu.sizePolicy().hasHeightForWidth())
        self.btn_tgl_menu.setSizePolicy(sizePolicy)
        self.btn_tgl_menu.setMaximumSize(QtCore.QSize(16777215, 16777215))
        self.btn_tgl_menu.setStyleSheet(
            "QPushButton {\n"
            "    background-image: url(:/24x24/icons/24x24/cil-menu.png);\n"
            "    background-position: center;\n"
            "    background-repeat: no-reperat;\n"
            "    border: none;\n"
            "    background-color: rgb(80, 74, 64);\n"
            "}\n"
            "QPushButton:hover {\n"
            "    background-color: rgb(133, 127, 114);\n"
            "}\n"
            "QPushButton:pressed {    \n"
            "    background-color: rgb(98, 93, 82);\n"
            "}")
        self.btn_tgl_menu.setText("")
        self.btn_tgl_menu.setObjectName("btn_tgl_menu")
        self.horizontalLayout_3.addWidget(self.btn_tgl_menu)
        self.horizontalLayout_2.addWidget(self.frame_toogle)
        self.frame_header_content = QtWidgets.QFrame(self.frame_header)
        self.frame_header_content.setToolTipDuration(0)
        self.frame_header_content.setStyleSheet(
            "background-color: rgb(184, 178, 167);")
        self.frame_header_content.setFrameShape(QtWidgets.QFrame.NoFrame)
        self.frame_header_content.setFrameShadow(QtWidgets.QFrame.Raised)
        self.frame_header_content.setObjectName("frame_header_content")
        self.verticalLayout_6 = QtWidgets.QVBoxLayout(
            self.frame_header_content)
        self.verticalLayout_6.setContentsMargins(0, 0, 0, 0)
        self.verticalLayout_6.setSpacing(0)
        self.verticalLayout_6.setObjectName("verticalLayout_6")
        self.frame_header_top = QtWidgets.QFrame(self.frame_header_content)
        self.frame_header_top.setMinimumSize(QtCore.QSize(0, 45))
        self.frame_header_top.setMaximumSize(QtCore.QSize(16777215, 45))
        self.frame_header_top.setFrameShape(QtWidgets.QFrame.NoFrame)
        self.frame_header_top.setFrameShadow(QtWidgets.QFrame.Raised)
        self.frame_header_top.setObjectName("frame_header_top")
        self.horizontalLayout_6 = QtWidgets.QHBoxLayout(self.frame_header_top)
        self.horizontalLayout_6.setContentsMargins(0, 0, 0, 0)
        self.horizontalLayout_6.setSpacing(0)
        self.horizontalLayout_6.setObjectName("horizontalLayout_6")
        self.label_title = QtWidgets.QLabel(self.frame_header_top)
        self.label_title.setStyleSheet("background-color: rgb(80, 74, 64);")
        self.label_title.setFrameShadow(QtWidgets.QFrame.Raised)
        self.label_title.setLineWidth(0)
        self.label_title.setIndent(0)
        self.label_title.setObjectName("label_title")
        self.horizontalLayout_6.addWidget(self.label_title)
        self.btn_minimize = QtWidgets.QPushButton(self.frame_header_top)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding,
                                           QtWidgets.QSizePolicy.Expanding)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(
            self.btn_minimize.sizePolicy().hasHeightForWidth())
        self.btn_minimize.setSizePolicy(sizePolicy)
        self.btn_minimize.setMinimumSize(QtCore.QSize(45, 0))
        self.btn_minimize.setMaximumSize(QtCore.QSize(45, 16777215))
        self.btn_minimize.setStyleSheet(
            "QPushButton {\n"
            "    background-image: url(:/16x16/icons/16x16/cil-window-minimize.png);\n"
            "    background-position: center;\n"
            "    background-repeat: no-reperat;\n"
            "    border: none;\n"
            "    background-color: rgb(80, 74, 64);\n"
            "}\n"
            "QPushButton:hover {\n"
            "    background-color: rgb(133, 127, 114);\n"
            "}\n"
            "QPushButton:pressed {    \n"
            "    background-color: rgb(98, 93, 82);\n"
            "}")
        self.btn_minimize.setText("")
        self.btn_minimize.setObjectName("btn_minimize")
        self.horizontalLayout_6.addWidget(self.btn_minimize)
        self.btn_maximise_restore = QtWidgets.QPushButton(
            self.frame_header_top)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding,
                                           QtWidgets.QSizePolicy.Expanding)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(
            self.btn_maximise_restore.sizePolicy().hasHeightForWidth())
        self.btn_maximise_restore.setSizePolicy(sizePolicy)
        self.btn_maximise_restore.setMinimumSize(QtCore.QSize(45, 0))
        self.btn_maximise_restore.setMaximumSize(QtCore.QSize(45, 16777215))
        self.btn_maximise_restore.setStyleSheet(
            "QPushButton {\n"
            "    background-image: url(:/16x16/icons/16x16/cil-window-maximize.png);\n"
            "    background-position: center;\n"
            "    background-repeat: no-reperat;\n"
            "    border: none;\n"
            "    background-color: rgb(80, 74, 64);\n"
            "}\n"
            "QPushButton:hover {\n"
            "    background-color: rgb(133, 127, 114);\n"
            "}\n"
            "QPushButton:pressed {    \n"
            "    background-color: rgb(98, 93, 82);\n"
            "}")
        self.btn_maximise_restore.setText("")
        self.btn_maximise_restore.setObjectName("btn_maximise_restore")
        self.horizontalLayout_6.addWidget(self.btn_maximise_restore)
        self.btn_close = QtWidgets.QPushButton(self.frame_header_top)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding,
                                           QtWidgets.QSizePolicy.Expanding)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(
            self.btn_close.sizePolicy().hasHeightForWidth())
        self.btn_close.setSizePolicy(sizePolicy)
        self.btn_close.setMinimumSize(QtCore.QSize(45, 0))
        self.btn_close.setMaximumSize(QtCore.QSize(45, 16777215))
        self.btn_close.setStyleSheet(
            "QPushButton {\n"
            "    background-image: ;\n"
            "    image: url(:/16x16/icons/16x16/cil-x.png);\n"
            "    background-position: center;\n"
            "    background-repeat: no-reperat;\n"
            "    border: none;\n"
            "    background-color: rgb(80, 74, 64);\n"
            "}\n"
            "QPushButton:hover {\n"
            "    background-color: rgb(133, 127, 114);\n"
            "}\n"
            "QPushButton:pressed {    \n"
            "    background-color: rgb(98, 93, 82);\n"
            "}")
        self.btn_close.setText("")
        self.btn_close.setObjectName("btn_close")
        self.horizontalLayout_6.addWidget(self.btn_close)
        self.verticalLayout_6.addWidget(self.frame_header_top)
        self.frame_header_bottom = QtWidgets.QFrame(self.frame_header_content)
        self.frame_header_bottom.setFrameShape(QtWidgets.QFrame.NoFrame)
        self.frame_header_bottom.setFrameShadow(QtWidgets.QFrame.Raised)
        self.frame_header_bottom.setObjectName("frame_header_bottom")
        self.verticalLayout_6.addWidget(self.frame_header_bottom)
        self.horizontalLayout_2.addWidget(self.frame_header_content)
        self.verticalLayout_2.addWidget(self.frame_header)
        self.frame_center = QtWidgets.QFrame(self.frame_main)
        self.frame_center.setFrameShape(QtWidgets.QFrame.NoFrame)
        self.frame_center.setFrameShadow(QtWidgets.QFrame.Raised)
        self.frame_center.setObjectName("frame_center")
        self.horizontalLayout = QtWidgets.QHBoxLayout(self.frame_center)
        self.horizontalLayout.setContentsMargins(0, 0, 0, 0)
        self.horizontalLayout.setSpacing(0)
        self.horizontalLayout.setObjectName("horizontalLayout")
        self.frame_side = QtWidgets.QFrame(self.frame_center)
        self.frame_side.setFrameShape(QtWidgets.QFrame.NoFrame)
        self.frame_side.setFrameShadow(QtWidgets.QFrame.Raised)
        self.frame_side.setObjectName("frame_side")
        self.layout_side = QtWidgets.QHBoxLayout(self.frame_side)
        self.layout_side.setContentsMargins(0, 0, 0, 0)
        self.layout_side.setSpacing(0)
        self.layout_side.setObjectName("layout_side")
        self.horizontalLayout.addWidget(self.frame_side)
        self.frame_content = QtWidgets.QFrame(self.frame_center)
        self.frame_content.setFrameShape(QtWidgets.QFrame.NoFrame)
        self.frame_content.setFrameShadow(QtWidgets.QFrame.Raised)
        self.frame_content.setObjectName("frame_content")
        self.verticalLayout_3 = QtWidgets.QVBoxLayout(self.frame_content)
        self.verticalLayout_3.setContentsMargins(0, 0, 0, 0)
        self.verticalLayout_3.setSpacing(0)
        self.verticalLayout_3.setObjectName("verticalLayout_3")
        self.frame_main_content = QtWidgets.QFrame(self.frame_content)
        self.frame_main_content.setStyleSheet(
            "background-color: rgb(66, 61, 51);")
        self.frame_main_content.setFrameShape(QtWidgets.QFrame.NoFrame)
        self.frame_main_content.setFrameShadow(QtWidgets.QFrame.Raised)
        self.frame_main_content.setObjectName("frame_main_content")
        self.horizontalLayout_4 = QtWidgets.QHBoxLayout(
            self.frame_main_content)
        self.horizontalLayout_4.setContentsMargins(0, 0, 0, 0)
        self.horizontalLayout_4.setSpacing(0)
        self.horizontalLayout_4.setObjectName("horizontalLayout_4")
        self.stackedWidget = QtWidgets.QStackedWidget(self.frame_main_content)
        self.stackedWidget.setObjectName("stackedWidget")
        self.page_color = QtWidgets.QWidget()
        self.page_color.setObjectName("page_color")
        self.verticalLayout_5 = QtWidgets.QVBoxLayout(self.page_color)
        self.verticalLayout_5.setObjectName("verticalLayout_5")
        self.color_palett = QtWidgets.QFrame(self.page_color)
        self.color_palett.setMaximumSize(QtCore.QSize(16777215, 60))
        self.color_palett.setFrameShape(QtWidgets.QFrame.StyledPanel)
        self.color_palett.setFrameShadow(QtWidgets.QFrame.Raised)
        self.color_palett.setObjectName("color_palett")
        self.horizontalLayout_5 = QtWidgets.QHBoxLayout(self.color_palett)
        self.horizontalLayout_5.setObjectName("horizontalLayout_5")
        self.frame_4 = QtWidgets.QFrame(self.color_palett)
        self.frame_4.setStyleSheet(
            "background-color: qlineargradient(spread:pad, x1:0, y1:0.523, x2:1, y2:0.5, stop:0 rgb(250, 249, 247), stop:1 rgb(39, 36, 29));"
        )
        self.frame_4.setFrameShape(QtWidgets.QFrame.StyledPanel)
        self.frame_4.setFrameShadow(QtWidgets.QFrame.Raised)
        self.frame_4.setObjectName("frame_4")
        self.horizontalLayout_5.addWidget(self.frame_4)
        self.verticalLayout_5.addWidget(self.color_palett)
        self.frame_3 = QtWidgets.QFrame(self.page_color)
        self.frame_3.setFrameShape(QtWidgets.QFrame.StyledPanel)
        self.frame_3.setFrameShadow(QtWidgets.QFrame.Raised)
        self.frame_3.setObjectName("frame_3")
        self.verticalLayout_5.addWidget(self.frame_3)
        self.stackedWidget.addWidget(self.page_color)
        self.page_2 = QtWidgets.QWidget()
        self.page_2.setObjectName("page_2")
        self.stackedWidget.addWidget(self.page_2)
        self.horizontalLayout_4.addWidget(self.stackedWidget)
        self.verticalLayout_3.addWidget(self.frame_main_content)
        self.frame_footer = QtWidgets.QFrame(self.frame_content)
        self.frame_footer.setMinimumSize(QtCore.QSize(0, 25))
        self.frame_footer.setStyleSheet("background-color: rgb(80, 74, 64);")
        self.frame_footer.setFrameShape(QtWidgets.QFrame.NoFrame)
        self.frame_footer.setFrameShadow(QtWidgets.QFrame.Raised)
        self.frame_footer.setObjectName("frame_footer")
        self.horizontalLayout_23 = QtWidgets.QHBoxLayout(self.frame_footer)
        self.horizontalLayout_23.setContentsMargins(0, 0, 0, 0)
        self.horizontalLayout_23.setObjectName("horizontalLayout_23")
        self.frame = QtWidgets.QFrame(self.frame_footer)
        self.frame.setFrameShape(QtWidgets.QFrame.StyledPanel)
        self.frame.setFrameShadow(QtWidgets.QFrame.Raised)
        self.frame.setObjectName("frame")
        self.horizontalLayout_23.addWidget(self.frame)
        self.frame_size_grip = QtWidgets.QFrame(self.frame_footer)
        self.frame_size_grip.setMinimumSize(QtCore.QSize(25, 0))
        self.frame_size_grip.setMaximumSize(QtCore.QSize(25, 16777215))
        self.frame_size_grip.setLayoutDirection(QtCore.Qt.LeftToRight)
        self.frame_size_grip.setStyleSheet(
            "background-image: url(:/16x16/icons/16x16/cil-size-grip.png);\n"
            "background-position: center;\n"
            "background-repeat: no-reperat;")
        self.frame_size_grip.setFrameShape(QtWidgets.QFrame.NoFrame)
        self.frame_size_grip.setFrameShadow(QtWidgets.QFrame.Raised)
        self.frame_size_grip.setObjectName("frame_size_grip")
        self.horizontalLayout_23.addWidget(self.frame_size_grip)
        self.verticalLayout_3.addWidget(self.frame_footer)
        self.horizontalLayout.addWidget(self.frame_content)
        self.verticalLayout_2.addWidget(self.frame_center)
        self.frame_center.raise_()
        self.frame_header.raise_()
        self.verticalLayout.addWidget(self.frame_main)
        MainWindow.setCentralWidget(self.centralwidget)

        self.retranslateUi(MainWindow)
        self.stackedWidget.setCurrentIndex(0)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))

    def mousePressEvent(self, event):
        self.dragPos = event.globalPos()

    def get_centerlayout(self):
        return self.layout_side

    def maximize(self):
        self.showMaximized()
        self.btn_maximise_restore.setToolTip("Restore")
        self.btn_maximise_restore.setStyleSheet(
            "QPushButton {\n"
            "    background-image: ;\n"
            "    image: url(:/16x16/icons/16x16/cil-window-restore.png);"
            "    background-position: center;\n"
            "    background-repeat: no-reperat;\n"
            "    border: none;\n"
            "    background-color: rgb(80, 74, 64);\n"
            "}\n"
            "QPushButton:hover {\n"
            "    background-color: rgb(133, 127, 114);\n"
            "}\n"
            "QPushButton:pressed {    \n"
            "    background-color: rgb(98, 93, 82);\n"
            "}")

    def restore(self):
        self.showNormal()
        self.move(self.dragPos - QtCore.QPoint(300, 25))
        self.btn_maximise_restore.setToolTip("Maximize")
        self.btn_maximise_restore.setStyleSheet(
            "QPushButton {\n"
            "    background-image: ;\n"
            "    image: url(:/16x16/icons/16x16/cil-window-maximize.png);\n"
            "    background-position: center;\n"
            "    background-repeat: no-reperat;\n"
            "    border: none;\n"
            "    background-color: rgb(80, 74, 64);\n"
            "}\n"
            "QPushButton:hover {\n"
            "    background-color: rgb(133, 127, 114);\n"
            "}\n"
            "QPushButton:pressed {    \n"
            "    background-color: rgb(98, 93, 82);\n"
            "}")

    def minimize(self):
        self.showMinimized()

    def change_sidemenu(self):
        self.main_controller.change_sidemenu()
コード例 #5
0
class MainWindowController(QtWidgets.QMainWindow, Ui_MainWindow):
    def __init__(self):
        super(MainWindowController, self).__init__()
        self.setupUi(self)
        self.initialize_crawler_processes()

    def setupUi(self, MainWindow):
        Ui_MainWindow.setupUi(self, MainWindow)

        ## REMOVE TITLE BAR
        self.setWindowFlag(QtCore.Qt.FramelessWindowHint)
        # self.setAttribute(QtCore.Qt.WA_TranslucentBackground)

        ## SHOW ==> DROP SHADOW
        # self.shadow = QGraphicsDropShadowEffect(self)
        # self.shadow.setBlurRadius(17)
        # self.shadow.setXOffset(0)
        # self.shadow.setYOffset(0)
        # self.shadow.setColor(QColor(0, 0, 0, 150))
        # self.frame_main.setGraphicsEffect(self.shadow)
        #
        # ==> RESIZE WINDOW
        self.sizegrip = QSizeGrip(self.frame_size_grip)
        self.sizegrip.setStyleSheet(
            "width: 20px; height: 20px; margin 0px; padding: 0px;")

        ### ==> MINIMIZE
        self.btn_minimize.clicked.connect(lambda: self.showMinimized())

        ## ==> MAXIMIZE/RESTORE
        self.btn_maximize_restore.clicked.connect(
            lambda: self.maximize_restore())

        ## SHOW ==> CLOSE APPLICATION
        self.btn_close.clicked.connect(lambda: self.close())

        ## TAB ==> tabs button click events
        self.pushButton_home.clicked.connect(lambda: self.switch_tab("home"))
        self.pushButton_crawler.clicked.connect(
            lambda: self.switch_tab("crawler"))
        self.pushButton_comments.clicked.connect(
            lambda: self.switch_tab("comments"))
        self.pushButton_commandInjection.clicked.connect(
            lambda: self.switch_tab("command_injection"))
        self.pushButton_localFileInclusion.clicked.connect(
            lambda: self.switch_tab("local_file_inclusion"))
        self.pushButton_sqlInjection.clicked.connect(
            lambda: self.switch_tab("sql_injection"))
        self.pushButton_stored_xssInjection.clicked.connect(
            lambda: self.switch_tab("xss_injection"))

        ##Upload file url events
        self.pushButton_url_file_open.clicked.connect(self.browse_url_file)

        ##Crawling event
        self.pushButton_start_crawling.clicked.connect(self.start_crawling)

        ##log
        sys.stdout = ConsoleLog(self.plainTextEdit_home_log,
                                "color:rgb(85, 255, 127);")
        sys.stderr = ConsoleLog(self.plainTextEdit_home_log,
                                "color:rgb(225, 0, 0);")

    def initialize_crawler_processes(self):
        #Crawler process
        self.crawler_process = QProcess(
        )  # Keep a reference to the QProcess (e.g. on self) while it's running.
        self.crawler_process.readyReadStandardOutput.connect(
            lambda: self.handle_stdout("crawler"))
        self.crawler_process.readyReadStandardError.connect(
            lambda: self.handle_stderr("crawler"))
        # self.p.stateChanged.connect(self.handle_state)
        self.crawler_process.finished.connect(
            self.crawler_process_finished)  # Clean up once complete.

        #Scanner process
        self.scanner_process = QProcess(
        )  # Keep a reference to the QProcess (e.g. on self) while it's running.
        self.scanner_process.readyReadStandardOutput.connect(
            lambda: self.handle_stdout("comments"))
        self.scanner_process.readyReadStandardError.connect(
            lambda: self.handle_stderr("comments"))
        # self.p.stateChanged.connect(self.handle_state)
        # self.scanner_process.finished.connect(self.crawler_process_finished)  # Clean up once complete.

        #Upload process
        self.upload_process = QProcess(
        )  # Keep a reference to the QProcess (e.g. on self) while it's running.
        self.upload_process.readyReadStandardOutput.connect(
            lambda: self.handle_stdout("command_injection"))
        self.upload_process.readyReadStandardError.connect(
            lambda: self.handle_stderr("command_injection"))
        # self.p.stateChanged.connect(self.handle_state)
        # self.upload_process.finished.connect(self.crawler_process_finished)  # Clean up once complete.

        #LFI Scanner process
        self.lfi_scanner_process = QProcess(
        )  # Keep a reference to the QProcess (e.g. on self) while it's running.
        self.lfi_scanner_process.readyReadStandardOutput.connect(
            lambda: self.handle_stdout("local_file_inclusion"))
        self.lfi_scanner_process.readyReadStandardError.connect(
            lambda: self.handle_stderr("local_file_inclusion"))
        # self.p.stateChanged.connect(self.handle_state)
        # self.lfi_scanner_process.finished.connect(self.crawler_process_finished)  # Clean up once complete.

        #SQLI Checker process
        self.sqli_checker_process = QProcess(
        )  # Keep a reference to the QProcess (e.g. on self) while it's running.
        self.sqli_checker_process.readyReadStandardOutput.connect(
            lambda: self.handle_stdout("sql_injection"))
        self.sqli_checker_process.readyReadStandardError.connect(
            lambda: self.handle_stderr("sql_injection"))
        # self.p.stateChanged.connect(self.handle_state)
        # self.sqli_checker_process.finished.connect(self.crawler_process_finished)  # Clean up once complete.

        #Stored XSS Checker process
        self.stored_xss_checker_process = QProcess(
        )  # Keep a reference to the QProcess (e.g. on self) while it's running.
        self.stored_xss_checker_process.readyReadStandardOutput.connect(
            lambda: self.handle_stdout("xss_injection"))
        self.stored_xss_checker_process.readyReadStandardError.connect(
            lambda: self.handle_stderr("xss_injection"))
        # self.p.stateChanged.connect(self.handle_state)
        # self.stored_xss_checker.finished.connect(self.crawler_process_finished)  # Clean up once complete.

    def crawler_process_finished(self):
        try:
            # start other process
            print("Starting Comments")
            self.scanner_process.start("python", ['tabs/comments/comments.py'])
            print("Starting Command Injection")
            self.upload_process.start(
                "python", ['tabs/command_injection/command_injection.py'])
            print("Starting Local File Inclusion")
            self.lfi_scanner_process.start(
                "python",
                ['tabs/local_file_inclusion/local_file_inclusion.py'])
            print("Starting SQL Injection")
            self.sqli_checker_process.start(
                "python", ['tabs/sql_injection/sql_injection.py'])
            print("Starting XSS Injection")
            self.stored_xss_checker_process.start(
                "python", ['tabs/xss_injection/xss_injection.py'])

        except Exception as e:
            print(e)

    def start_crawling(self):
        filename = self.lineEdit_url_file_path.text().strip()
        if filename != "":
            try:
                links = open(filename).read().strip().split("\n")
                print("Links Found")
                for link in links:
                    print(link)
                self.crawler_process.start("python",
                                           ['tabs/crawler/crawler.py'])
                print("Crawler Started!")
            except Exception as e:
                print(e)
        else:
            raise Exception("Please command_injection a url file first")

    def handle_stdout(self, process):
        if process == "crawler":
            self.plainTextEdit_crawler_log.setStyleSheet(
                "color:rgb(85, 255, 127);")
            text = bytes(
                self.crawler_process.readAllStandardOutput()).decode("utf8")
            self.plainTextEdit_crawler_log.insertPlainText(text)
        elif process == "comments":
            self.plainTextEdit_comments_log.setStyleSheet(
                "color:rgb(85, 255, 127);")
            text = bytes(
                self.scanner_process.readAllStandardOutput()).decode("utf8")
            self.plainTextEdit_comments_log.insertPlainText(text)
        elif process == "command_injection":
            self.plainTextEdit_command_injection_log.setStyleSheet(
                "color:rgb(85, 255, 127);")
            text = bytes(
                self.upload_process.readAllStandardOutput()).decode("utf8")
            self.plainTextEdit_command_injection_log.insertPlainText(text)
        elif process == "local_file_inclusion":
            self.plainTextEdit_local_file_inclusion_log.setStyleSheet(
                "color:rgb(85, 255, 127);")
            text = bytes(
                self.lfi_scanner_process.readAllStandardOutput()).decode(
                    "utf8")
            self.plainTextEdit_local_file_inclusion_log.insertPlainText(text)
        elif process == "sql_injection":
            self.plainTextEdit_sql_injection_log.setStyleSheet(
                "color:rgb(85, 255, 127);")
            text = bytes(
                self.sqli_checker_process.readAllStandardOutput()).decode(
                    "utf8")
            self.plainTextEdit_sql_injection_log.insertPlainText(text)
        elif process == "xss_injection":
            self.plainTextEdit_xss_injection_log.setStyleSheet(
                "color:rgb(85, 255, 127);")
            text = bytes(self.stored_xss_checker_process.readAllStandardOutput(
            )).decode("utf8")
            self.plainTextEdit_xss_injection_log.insertPlainText(text)
        else:
            self.plainTextEdit_home_log.setStyleSheet(
                "color:rgb(85, 255, 127);")
            text = str(self.process.readAllStandardOutput())
            self.plainTextEdit_home_log.insertPlainText(text)

    def handle_stderr(self, process):
        if process == "crawler":
            self.plainTextEdit_crawler_log.setStyleSheet(
                "color:rgb(225, 0, 0);")
            text = bytes(
                self.crawler_process.readAllStandardError()).decode("utf8")
            self.plainTextEdit_crawler_log.insertPlainText(text)
        elif process == "comments":
            self.plainTextEdit_comments_log.setStyleSheet(
                "color:rgb(225, 0, 0);")
            text = bytes(
                self.scanner_process.readAllStandardError()).decode("utf8")
            self.plainTextEdit_comments_log.insertPlainText(text)
        elif process == "command_injection":
            self.plainTextEdit_command_injection_log.setStyleSheet(
                "color:rgb(225, 0, 0);")
            text = bytes(
                self.upload_process.readAllStandardError()).decode("utf8")
            self.plainTextEdit_command_injection_log.insertPlainText(text)
        elif process == "local_file_inclusion":
            self.plainTextEdit_local_file_inclusion_log.setStyleSheet(
                "color:rgb(225, 0, 0);")
            text = bytes(
                self.lfi_scanner_process.readAllStandardError()).decode("utf8")
            self.plainTextEdit_local_file_inclusion_log.insertPlainText(text)
        elif process == "sql_injection":
            self.plainTextEdit_sql_injection_log.setStyleSheet(
                "color:rgb(225, 0, 0);")
            text = bytes(
                self.sqli_checker_process.readAllStandardError()).decode(
                    "utf8")
            self.plainTextEdit_sql_injection_log.insertPlainText(text)
        elif process == "xss_injection":
            self.plainTextEdit_xss_injection_log.setStyleSheet(
                "color:rgb(225, 0, 0);")
            text = bytes(
                self.stored_xss_checker_process.readAllStandardError()).decode(
                    "utf8")
            self.plainTextEdit_xss_injection_log.insertPlainText(text)
        else:
            text = str(self.process.readAllStandardError())
            self.plainTextEdit_home_log.insertPlainText(text)

    def browse_url_file(self):
        options = QFileDialog.Options()
        # options |= QFileDialog.DontUseNativeDialog
        fileName, _ = QFileDialog.getOpenFileName(
            self,
            "Open URL File",
            "",
            "Text Files (*);;URL File (*.txt)",
            options=options)
        if fileName:
            print("URL File Selected: " + fileName)
            self.lineEdit_url_file_path.setText(fileName)
        else:
            print("No File Selected!")

    def reset_tab_buttons_color(self):
        self.pushButton_home.setStyleSheet("padding:10px 15px;color:white;")
        self.pushButton_crawler.setStyleSheet("padding:10px 15px;color:white;")
        self.pushButton_comments.setStyleSheet(
            "padding:10px 15px;color:white;")
        self.pushButton_commandInjection.setStyleSheet(
            "padding:10px 15px;color:white;")
        self.pushButton_localFileInclusion.setStyleSheet(
            "padding:10px 15px;color:white;")
        self.pushButton_sqlInjection.setStyleSheet(
            "padding:10px 15px;color:white;")
        self.pushButton_stored_xssInjection.setStyleSheet(
            "padding:10px 15px;color:white;")

    def switch_tab(self, tab):
        if tab == "home":
            self.reset_tab_buttons_color()
            self.pushButton_home.setStyleSheet(
                "padding:10px 15px;color:white;background-color:rgb(0, 170, 255);"
            )
            self.stackedWidget_tabs.setCurrentIndex(0)
        elif tab == "crawler":
            self.reset_tab_buttons_color()
            self.pushButton_crawler.setStyleSheet(
                "padding:10px 15px;color:white;background-color:rgb(0, 170, 255);"
            )
            self.stackedWidget_tabs.setCurrentIndex(1)
        elif tab == "comments":
            self.reset_tab_buttons_color()
            self.pushButton_comments.setStyleSheet(
                "padding:10px 15px;color:white;background-color:rgb(0, 170, 255);"
            )
            self.stackedWidget_tabs.setCurrentIndex(2)
        elif tab == "command_injection":
            self.reset_tab_buttons_color()
            self.pushButton_commandInjection.setStyleSheet(
                "padding:10px 15px;color:white;background-color:rgb(0, 170, 255);"
            )
            self.stackedWidget_tabs.setCurrentIndex(3)
        elif tab == "local_file_inclusion":
            self.reset_tab_buttons_color()
            self.pushButton_localFileInclusion.setStyleSheet(
                "padding:10px 15px;color:white;background-color:rgb(0, 170, 255);"
            )
            self.stackedWidget_tabs.setCurrentIndex(4)
        elif tab == "sql_injection":
            self.reset_tab_buttons_color()
            self.pushButton_sqlInjection.setStyleSheet(
                "padding:10px 15px;color:white;background-color:rgb(0, 170, 255);"
            )
            self.stackedWidget_tabs.setCurrentIndex(5)
        elif tab == "xss_injection":
            self.reset_tab_buttons_color()
            self.pushButton_stored_xssInjection.setStyleSheet(
                "padding:10px 15px;color:white;background-color:rgb(0, 170, 255);"
            )
            self.stackedWidget_tabs.setCurrentIndex(6)

    def maximize_restore(self):
        global GLOBAL_STATE
        status = GLOBAL_STATE
        if status == 0:
            self.showMaximized()
            GLOBAL_STATE = 1
            # self.centralWidget.setContentsMargins(0, 0, 0, 0)
            self.btn_maximize_restore.setToolTip("Restore")
            self.btn_maximize_restore.setIcon(
                QtGui.QIcon(u":/16x16/icons/16x16/cil-window-restore.png"))
            self.frame_top_btns.setStyleSheet(
                "background-color: rgb(27, 29, 35)")
            self.frame_size_grip.hide()
        else:
            GLOBAL_STATE = 0
            self.showNormal()
            self.resize(800, 600)
            # self.ui.horizontalLayout.setContentsMargins(10, 10, 10, 10)
            self.btn_maximize_restore.setToolTip("Maximize")
            self.btn_maximize_restore.setIcon(
                QtGui.QIcon(u":/16x16/icons/16x16/cil-window-maximize.png"))
            self.frame_top_btns.setStyleSheet(
                "background-color: rgba(27, 29, 35, 200)")
            self.frame_size_grip.show()
コード例 #6
0
class StatusBar(QWidget):
    def __init__(self, parent):
        super().__init__()

        self.initUI()

    def initUI(self):
        self.centralFrame = QFrame(self)
        self.centralFrame.setFrameShape(QFrame.NoFrame)
        self.centralFrame.setFrameShadow(QFrame.Raised)
        self.centralFrame.setMinimumSize(QSize(0, 25))
        self.centralFrame.setMaximumSize(QSize(16777215, 25))
        self.centralFrame.setContentsMargins(0, 0, 0, 0)
        self.centralFrame.setStyleSheet(u"background-color: rgb(27, 29, 35);")

        self.labelsFrame = QFrame(self.centralFrame)
        self.labelsFrame.setFrameShape(QFrame.NoFrame)
        self.labelsFrame.setFrameShadow(QFrame.Raised)
        self.labelsFrame.setContentsMargins(0, 0, 0, 0)
        self.labelsFrame.setStyleSheet("border: none;")

        self.developerLabel = Label(self.labelsFrame)
        self.developerLabel.setText("Ashwin Sakhare")

        self.instituteLabel = Label(self.labelsFrame)
        self.instituteLabel.setText(
            "Stevens Neuroimaging and Informatics Institute")

        self.universityLabel = Label(self.labelsFrame)
        self.universityLabel.setText("University of Southern California")

        self.labelsLayout = QHBoxLayout(self.labelsFrame)
        self.labelsLayout.addWidget(self.developerLabel)
        self.labelsLayout.addWidget(self.instituteLabel)
        self.labelsLayout.addWidget(self.universityLabel)
        self.labelsLayout.setSpacing(50)
        self.labelsLayout.setContentsMargins(10, 0, 0, 0)

        self.labelsLayout.setAlignment(Qt.AlignLeft)

        self.versionFrame = QFrame(self.centralFrame)
        self.versionFrame.setFrameShape(QFrame.NoFrame)
        self.versionFrame.setFrameShadow(QFrame.Raised)
        self.versionFrame.setContentsMargins(0, 0, 0, 0)
        self.versionFrame.setStyleSheet("border: none;")

        self.versionLabel = Label(self.labelsFrame)
        self.versionLabel.setText("v1.0.0 alpha")

        self.versionLayout = QHBoxLayout(self.versionFrame)
        self.versionLayout.addWidget(self.versionLabel)
        self.versionLayout.setAlignment(Qt.AlignRight)
        self.versionLayout.setContentsMargins(0, 0, 20, 0)

        self.gripFrame = QFrame(self.centralFrame)
        self.gripFrame.setFrameShape(QFrame.NoFrame)
        self.gripFrame.setFrameShadow(QFrame.Raised)
        self.gripFrame.setMaximumSize(QSize(20, 20))
        self.gripFrame.setContentsMargins(0, 0, 0, 0)

        # path = resource_path('icons/cil-size-grip.png')
        # self.gripFrame.setStyleSheet("background-image: url(" + str(path) + "); \n"
        #                              "background-position: center; \n"
        #                              "background-repeat: no repeat")

        self.ui_sizeGrip = QSizeGrip(self.gripFrame)
        self.ui_sizeGrip.setStyleSheet(
            "width: 20px; height: 20px; margin 0px; padding: 0px;")

        self.gripLabel = QLabel(self.gripFrame)
        self.pixmap = QPixmap(resource_path('icons/cil-size-grip.png'))
        self.gripLabel.setPixmap(self.pixmap)

        self.gripLayout = QHBoxLayout(self.gripFrame)
        self.gripLayout.addWidget(self.gripLabel)
        self.gripLayout.setAlignment(Qt.AlignCenter)
        self.gripLayout.setContentsMargins(0, 0, 0, 0)

        self.centralLayout = QHBoxLayout(self.centralFrame)
        self.centralLayout.addWidget(self.labelsFrame)
        self.centralLayout.addWidget(self.versionFrame)
        self.centralLayout.addWidget(self.gripFrame)
        self.centralLayout.setSpacing(0)
        self.centralLayout.setContentsMargins(0, 0, 0, 0)

        self.uiLayout = QHBoxLayout(self)
        self.uiLayout.addWidget(self.centralFrame)
        self.uiLayout.setContentsMargins(0, 0, 0, 0)

        self.setLayout(self.uiLayout)