Exemplo n.º 1
0
    def __init__(self):
        super().__init__()

        layout = QVBoxLayout(self)
        layout.setAlignment(Qt.AlignCenter)

        self.file_selector = Path_selector('file')
        self.folder_selector = Path_selector('folder')
        self.file_selector.setFixedSize(500, 40)
        self.folder_selector.setFixedSize(500, 40)

        layout.addWidget(self.file_selector)
        layout.addWidget(self.folder_selector)

        button = QPushButton("Execute")
        button.clicked.connect(self.handleExecute)
        button.setFixedSize(100, 40)

        layout.addWidget(button, alignment=Qt.AlignCenter)

        button_rev = QPushButton("Backwards")
        button_rev.clicked.connect(self.handleBackwards)
        button_rev.setFixedSize(100, 40)

        layout.addWidget(button_rev, alignment=Qt.AlignCenter)
Exemplo n.º 2
0
class TetrisView(QWidget):

    GAME = 1

    def __init__(self, signalController, status_bar):
        super().__init__()

        self.signalController = signalController
        self.statusBar = status_bar
        self.initUI()

    def initUI(self):
        """
        Init app

        """
        vbox = QVBoxLayout()
        hbox = QHBoxLayout()

        # Create button "back to the menu"
        self._buttonBack = QPushButton(QIcon(PATH_IMAGE_BACK_NEDDLE), "", self)
        self._buttonBack.clicked.connect(self.signalController.back2menu)
        self._buttonBack.setFixedSize(60, 30)
        vbox.addWidget(self._buttonBack, 0, QtCore.Qt.AlignTop)

        self.tboard = Board(self)

        # Create button which restart game
        self._restartGame = QPushButton(QIcon(PATH_IMAGE_RELOAD), "", self)
        self._restartGame.clicked.connect(self.tboard.start)
        self._restartGame.setFixedSize(60, 30)
        vbox.addWidget(self._restartGame, 1, QtCore.Qt.AlignTop)

        # Create label "Score"
        self._labelScore = QLabel("Game Score", self)
        vbox.addWidget(self._labelScore, 2, QtCore.Qt.AlignBottom)

        # Create score counter
        self._score = QLCDNumber(self)
        self._score.setFixedSize(70, 50)
        vbox.addWidget(self._score, 3, QtCore.Qt.AlignTop)

        hbox.addLayout(vbox, 0)
        hbox.addWidget(self.tboard, 1)

        self.setLayout(hbox)
        self.setWindowTitle("TetrisView")

        self.tboard.msg2StatusBar[str].connect(self._score.display)

    def switcher(self):
        self.tboard.start()
        self.signalController.sgn2stacked.emit(int(self.GAME))
Exemplo n.º 3
0
 def create_seed_ratio_grid(self):
     self.scroll_widget = QWidget()
     self.scroll_widget.setSizePolicy(QSizePolicy.Maximum,
                                      QSizePolicy.Maximum)
     self.seedRatioGrid = QGridLayout()
     self.seed_ratio_buttons = []
     self.num_columns = 4
     self.num_rows = 8
     for row in range(0, self.num_rows):
         for column in range(0, self.num_columns):
             idx = row * self.num_columns + column
             new_button = QPushButton()
             new_button.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed)
             new_button.setFixedSize(80, 20)
             sp = new_button.sizePolicy()
             sp.setRetainSizeWhenHidden(True)
             new_button.setSizePolicy(sp)
             new_button.clicked.connect(
                 lambda state=True, x=idx: self.seed_button_pushed(x))
             self.seed_ratio_buttons.append(new_button)
             self.seedRatioGrid.addWidget(new_button, row, column)
     self.scroll_widget.setLayout(self.seedRatioGrid)
     self.seedRatios.setWidget(self.scroll_widget)
Exemplo n.º 4
0
class MainWidget(QWidget):
    def __init__(self, base):
        QWidget.__init__(self)

        self.base = base

        self.setWindowIcon(QIcon('icon.ico'))
        self.setWindowTitle(TITLE)
        self.set_background_color(QColor(255, 255, 255))

        self.process_header_widget = QWidget()
        self.process_header_layout = QHBoxLayout(self.process_header_widget)
        self.process_header_layout.setContentsMargins(0, 0, 0, 0)

        self.process_label = QLabel('Available processes:')
        self.github_label = QLabel(
            '<a href="https://github.com/darktohka/p3dephaser">GitHub</a>')
        self.github_label.setOpenExternalLinks(True)

        self.refresh_button = QPushButton('Refresh')
        self.refresh_button.clicked.connect(self.refresh_processes)
        self.refresh_button.setFixedSize(100, 23)

        self.multifile_widget = QWidget()
        self.multifile_layout = QHBoxLayout(self.multifile_widget)
        self.multifile_layout.setContentsMargins(0, 0, 0, 0)
        self.multifileLabel = QLabel('Requested multifile names:')
        self.multifileBox = QLineEdit(self)
        self.multifileBox.returnPressed.connect(self.begin_scan)

        self.multifile_layout.addWidget(self.multifileLabel)
        self.multifile_layout.addWidget(self.multifileBox)

        self.scan_button = QPushButton('Scan')
        self.scan_button.clicked.connect(self.begin_scan)

        self.process_list_box = QListWidget()

        self.process_header_layout.addWidget(self.process_label)
        self.process_header_layout.addStretch(1)
        self.process_header_layout.addWidget(self.github_label)
        self.process_header_layout.addWidget(self.refresh_button)

        self.result_table = QTableWidget()
        self.result_table.setColumnCount(3)
        self.result_table.horizontalHeader().setStretchLastSection(True)
        self.result_table.horizontalHeader().setSectionResizeMode(
            QHeaderView.ResizeMode.Stretch)

        for i, header in enumerate(('Process', 'Multifile', 'Password')):
            self.result_table.setHorizontalHeaderItem(i,
                                                      QTableWidgetItem(header))

        self.base_layout = QVBoxLayout(self)
        self.base_layout.setContentsMargins(15, 15, 15, 15)
        self.base_layout.addWidget(self.process_header_widget)
        self.base_layout.addWidget(self.process_list_box)
        self.base_layout.addWidget(self.multifile_widget)
        self.base_layout.addWidget(self.scan_button)
        self.base_layout.addWidget(self.result_table)

        self.refresh_processes()

        self.thread_pool = QThreadPool()
        self.worker = None
        self.process_name = None
        self.stop_event = threading.Event()

    def set_background_color(self, color):
        self.setAutoFillBackground(True)
        palette = self.palette()
        palette.setColor(self.backgroundRole(), color)
        self.setPalette(palette)

    def get_processes(self):
        processes = []

        for proc in psutil.process_iter():
            processes.append(proc.as_dict(attrs=['pid', 'name']))

        processes.sort(
            key=lambda process: (process['name'].lower(), process['pid']))
        return processes

    def refresh_processes(self):
        self.process_list_box.clear()
        processes = self.get_processes()

        for process in processes:
            name = process['name']
            pid = process['pid']
            self.process_list_box.addItem(f'{name} (PID {pid})')

    def begin_scan(self):
        if self.worker:
            self.stop_event.set()
            self.scan_button.setEnabled(False)
            return

        items = self.process_list_box.selectedItems()

        if not items:
            QMessageBox.warning(self, TITLE,
                                'Please choose a process from the list!')
            return

        process = items[0].text()[:-1].split(' ')
        self.process_name = ' '.join(process[:-2])
        pid = int(process[-1])
        multifiles = self.multifileBox.text().split()

        if not multifiles:
            QMessageBox.warning(self, TITLE,
                                'Please choose some multifiles to target!')
            return

        multifile_names = '\n'.join(
            [f'- {multifile}' for multifile in multifiles])
        question = f'Do you really want to scan {self.process_name} for the following multifiles?\n\n{multifile_names}'

        if QMessageBox.question(
                self, TITLE, question,
                QMessageBox.StandardButton.Yes | QMessageBox.StandardButton.No
        ) != QMessageBox.StandardButton.Yes:
            return

        self.count = 0

        self.setWindowTitle(f'{TITLE} - Scanning...')
        self.scan_button.setText('Stop')

        self.worker = ScanWorker(self, pid, multifiles)
        self.worker.signals.finished.connect(self.scan_over)
        self.worker.signals.error.connect(self.error_occurred)
        self.worker.signals.progress.connect(self.report_progress)

        self.thread_pool.start(self.worker)

    def scan_over(self):
        self.worker = None
        self.stop_event.clear()

        self.scan_button.setText('Scan')
        self.scan_button.setEnabled(True)
        self.setWindowTitle(TITLE)
        QMessageBox.information(
            self, TITLE,
            f'Scan complete!\n\n{self.count} password{"s have" if self.count != 1 else " has"} been found.'
        )

    def error_occurred(self, error):
        exc, value, message = error
        QMessageBox.critical(
            self, TITLE,
            f'An error has occurred while trying to scan this process!\n\n{exc} {value}\n\n{message}'
        )

    def report_progress(self, multifile, password):
        self.count += 1
        index = self.result_table.rowCount()

        self.result_table.insertRow(index)

        for i, value in enumerate((self.process_name, multifile, password)):
            self.result_table.setItem(index, i, QTableWidgetItem(value))