Esempio n. 1
0
    def run(self, filename):
        layout_ = QVBoxLayout()
        label = QLabel("Обработка файла: {}".format(filename))
        layout_.addWidget(label)

        progress_bar = QProgressBar()
        progress_bar.setRange(0, 100)
        message = QLabel()
        layout_.addWidget(message, alignment=Qt.AlignCenter)

        layout_.addWidget(progress_bar)

        self.layout().addLayout(layout_)

        def progress_bar_update(text='', value=0):
            progress_bar.setValue(value)
            message.setText(text)
            QApplication.instance().processEvents()

        try:
            sources = find_missing_src(filename, progress_bar_update,
                                       **self.config())

            result_widget = ResultWidget(sources, filename, **self.config())
            if self.auto_save.isChecked():
                result_widget.save(auto=True)

            self.new_result.emit(result_widget, filename,
                                 self.view_type_checkbox.isChecked())
        except NoSourcesException as e:
            QMessageBox().critical(
                self, "Ошибка", "Раздел с источниками не обнаружен" + str(e))
        except Exception as exception:
            QMessageBox().critical(
                self, "Ошибка",
                "Во время чтения файла произошла ошибка" + str(exception))
            traceback.print_exc(exception)

        finally:
            self.layout().removeItem(layout_)
            progress_bar.setParent(None)
            progress_bar.deleteLater()
            label.setParent(None)
            label.deleteLater()
            message.setParent(None)
            message.deleteLater()
            layout_.deleteLater()
            QApplication.instance().processEvents()
Esempio n. 2
0
class BusyBar(QThread):  # Looping progress bar
    # create the signal that the thread will emit
    changeValue = pyqtSignal(int)

    def __init__(self, text=""):
        QThread.__init__(self)
        self.text = text
        self.stop = False
        self.proBar = QProgressBar()
        self.proBar.setWindowFlags(Qt.WindowStaysOnTopHint | Qt.SplashScreen)
        self.proBar.setRange(0, 100)
        self.proBar.setTextVisible(True)
        self.proBar.setFormat(self.text)
        self.proBar.setValue(0)
        self.proBar.setFixedSize(500, 50)
        self.proBar.setAlignment(Qt.AlignCenter)
        self.proBar.show()

        self.changeValue.connect(self.proBar.setValue, Qt.QueuedConnection)
        # Make the Busybar delete itself and the QProgressBar when done
        self.finished.connect(self.onFinished)

    def run(self):
        while not self.stop:  # keep looping while self is visible
            # Loop sending mail
            for i in range(100):
                # emit the signal instead of calling setValue
                # also we can't read the progress bar value from the thread
                self.changeValue.emit(i)
                time.sleep(0.05)
            self.changeValue.emit(0)

    def onFinished(self):
        self.proBar.deleteLater()
        self.deleteLater()

    def Kill(self):
        self.stop = True
Esempio n. 3
0
File: main.py Progetto: 9kin/PyQuiz
class Host(QWidget):
    def __init__(self, quiz):
        super().__init__()
        self.move(*COORDS)
        self.setWindowTitle('pyQuiz')
        self.name = quiz['name']
        del quiz['name']
        self.quiz = quiz
        self.curent_window = None
        self.API = None
        self.question_button = None
        self.timer = None
        self.raiting_table, self.raiting_box, self.raiting_button = None, None, None
        # question
        self.answers = []
        self.question_box, self.question_label, self.question_pbar = None, None, None
        # true_answer
        self.true_answer_box, self.true_answer_button, self.true_answer_question = None, None, None
        self.true_answer_label, self.true_answer_answer = None, None
        # person_waiting
        self.person_waiting_pin = None
        self.person_waiting_box, self.person_waiting_title = None, None
        self.person_waiting_table, self.person_waiting_button = None, None
        self.person_waiting_box = None
        self.thread_signal(URL)

    def delete_raiting_widgets(self):
        if self.raiting_box is not None:
            sip.delete(self.raiting_box)
            self.raiting_box = None
        if self.raiting_table is not None:
            self.raiting_table.deleteLater()
            self.raiting_table = None
        if self.raiting_button is not None:
            self.raiting_button.deleteLater()
            self.raiting_button = None

    def delete_question_widgets(self):
        if self.timer is not None:
            self.timer.stop()
            self.timer = None
        if self.question_box is not None:
            sip.delete(self.question_box)
            self.question_box = None
        if self.question_label is not None:
            self.question_label.deleteLater()
            self.question_label = None
        if self.answers is not None:
            for i in range(len(self.answers)):
                if self.answers[i] is not None:
                    self.answers[i].deleteLater()
                    self.answers[i] = None
        self.answers = []
        if self.question_button is not None:
            self.question_button.deleteLater()
            self.question_button = None

        if self.question_pbar is not None:
            self.question_pbar.deleteLater()
            self.question_pbar = None

    def delete_true_answer_widgets(self):
        if self.true_answer_box is not None:
            sip.delete(self.true_answer_box)
            self.true_answer_box = None
        if self.true_answer_question is not None:
            self.true_answer_question.deleteLater()
            self.true_answer_question = None
        if self.true_answer_label is not None:
            self.true_answer_label.deleteLater()
            self.true_answer_label = None
        if self.true_answer_answer is not None:
            self.true_answer_answer.deleteLater()
            self.true_answer_answer = None
        if self.true_answer_button is not None:
            self.true_answer_button.deleteLater()
            self.true_answer_button = None

    def delete_person_waiting_widgets(self):
        if self.person_waiting_table is not None:
            self.person_waiting_table.deleteLater()
            self.person_waiting_table = None
        if self.person_waiting_box is not None:
            sip.delete(self.person_waiting_box)
            self.person_waiting_box = None
        if self.person_waiting_button is not None:
            self.person_waiting_button.deleteLater()
            self.person_waiting_button = None
        if self.person_waiting_title is not None:
            self.person_waiting_title.deleteLater()
            self.person_waiting_title = None
        if self.person_waiting_pin is not None:
            self.person_waiting_pin.deleteLater()
            self.person_waiting_pin = None

    def delete_all_windgets(self):
        self.delete_person_waiting_widgets()  # +++
        self.delete_true_answer_widgets()  # +++
        self.delete_raiting_widgets()  # +++
        self.delete_question_widgets()  # +++

    def raiting_window(self, raiting: List[Tuple[int, str]]):
        self.delete_all_windgets()
        self.raiting_box = QVBoxLayout()
        self.raiting_box.setContentsMargins(0, 0, 0, 0)
        raiting.sort(reverse=True)
        self.raiting_table = QTableWidget()
        self.raiting_table.setRowCount(len(raiting))
        self.raiting_table.setColumnCount(2)
        self.raiting_table.setHorizontalHeaderLabels(['имя', 'очки'])
        for i in range(len(raiting)):
            self.raiting_table.setItem(i, 1,
                                       QTableWidgetItem(str(raiting[i][0])))
            self.raiting_table.setItem(i, 0,
                                       QTableWidgetItem(str(raiting[i][1])))
        self.raiting_table.setColumnWidth(0, 177)
        self.raiting_table.setColumnWidth(1, 120)
        self.raiting_table.setEditTriggers(QTableWidget.NoEditTriggers)
        self.setStyleSheet(QUIZ_STYLE_SHEET)
        self.raiting_box.addWidget(self.raiting_table)
        self.raiting_button = QPushButton('next')
        self.raiting_button.clicked.connect(self.to_question)
        self.raiting_box.addWidget(self.raiting_button)
        self.setLayout(self.raiting_box)
        self.setFixedSize(300, 300)

    def question_window(self, question, answer_array, time=10):
        self.delete_all_windgets()
        self.time = time
        self.question_box = QVBoxLayout()
        self.question_label = QLabel()
        self.question_label.setText(question)
        self.question_label.setStyleSheet(
            'QLabel{font-size:50px;font-weight:bold;background-color:#3C3F41;color:#BBBBBB;}'
        )
        self.question_label.setAlignment(Qt.AlignCenter | Qt.AlignHCenter)
        self.question_box.addWidget(self.question_label)

        self.answers = [0 for _ in range(len(answer_array))]
        for i in range(len(answer_array)):
            self.answers[i] = QLabel(str(answer_array[i]))
            self.answers[i].setStyleSheet(
                'QLabel {font-size: 40px; font-weight: bold; background-color: '
                + OPTIONS_BUTTONS_COLOR[i] + '; color: ' +
                OPTIONS_BUTTONS_STRING_COLOR[i] + ';}')
            self.question_box.addWidget(self.answers[i])

        self.question_pbar = QProgressBar()
        self.question_pbar.setFixedHeight(50)
        self.question_pbar.setStyleSheet("""
                QProgressBar{
                    border: 2px solid grey;
                    border-radius: 5px;
                    text-align: center;
                    color: black;
                    font-size:30px;
                }

                QProgressBar::chunk {
                    background-color: pink;
                    width: 10px;
                    margin: 1px;
                }
            """)

        self.timer = QBasicTimer()
        self.step = 0
        self.timer.start(100, self)
        self.question_box.addWidget(self.question_pbar)
        self.setLayout(self.question_box)
        self.setStyleSheet(QUIZ_STYLE_SHEET)
        self.setFixedSize(1000, 480)

    def timerEvent(self, e):
        if self.question_pbar is not None and self.question_pbar.value(
        ) == 100:
            self.question_pbar.deleteLater()
            self.question_pbar = None
            self.question_button = QPushButton('next')
            self.question_button.setFixedHeight(50)
            self.question_button.clicked.connect(self.to_true_false)

            self.question_box.addWidget(self.question_button)
            self.setFixedSize(1000, 480)
            # QShortcut(QKeySequence("Ctrl+n"), self, self.next)

        elif self.question_pbar is not None:
            self.step = self.step + 100 / self.time / 10
            self.question_pbar.setValue(min(self.step, 100))

    def true_answer_window(self, question, answer, index):
        self.delete_all_windgets()
        self.true_answer_box = QVBoxLayout()
        self.true_answer_question = QLabel()
        self.true_answer_question.setText(question)
        self.true_answer_question.setStyleSheet(
            'QLabel{font-size:50px;font-weight:bold;background-color:#3C3F41;color:#BBBBBB;}'
        )
        self.true_answer_question.setAlignment(Qt.AlignCenter
                                               | Qt.AlignHCenter)

        self.true_answer_label = QLabel('Правильный ответ:')
        self.true_answer_label.setStyleSheet(
            'QLabel{font-size:50px;font-weight:bold;background-color:#3C3F41;color:#BBBBBB;}'
        )
        self.true_answer_label.setAlignment(Qt.AlignCenter | Qt.AlignHCenter)
        self.true_answer_label.setFixedHeight(50)

        self.true_answer_answer = QLabel(str(answer))

        self.true_answer_answer.setStyleSheet(
            'QLabel {font-size: 40px; font-weight: bold; background-color: ' +
            OPTIONS_BUTTONS_COLOR[index] + '; color: ' +
            OPTIONS_BUTTONS_STRING_COLOR[index] + ';}')
        self.true_answer_box.addWidget(self.true_answer_question)
        self.true_answer_box.addWidget(self.true_answer_label)
        self.true_answer_box.addWidget(self.true_answer_answer)
        self.true_answer_button = QPushButton('next')
        self.true_answer_button.clicked.connect(self.to_raiting)
        self.true_answer_box.addWidget(self.true_answer_button)
        self.setLayout(self.true_answer_box)
        self.setStyleSheet(QUIZ_STYLE_SHEET)
        self.setFixedSize(1000, 480)

    def to_raiting(self):
        self.curent_window = self.raiting_window

    def to_question(self):
        self.curent_window = self.question_window

    def to_true_false(self):
        self.curent_window = self.true_answer_window

    def person_waiting_window(self, quiz_title, pin, peoples):
        self.delete_all_windgets()
        self.person_waiting_box = QVBoxLayout()
        self.person_waiting_table = QTableWidget()
        self.person_waiting_table.setRowCount(len(peoples))
        self.person_waiting_table.setColumnCount(1)
        self.person_waiting_table.horizontalHeader().hide()
        self.person_waiting_table.verticalHeader().hide()

        for i in range(len(peoples)):
            self.person_waiting_table.setItem(
                i, 0, QTableWidgetItem(str(peoples[i])))
        self.person_waiting_table.setColumnWidth(0, 300)
        self.person_waiting_table.setFixedHeight(150)

        self.person_waiting_title = QLabel()
        self.person_waiting_title.resize(300, 100)
        self.person_waiting_title.setText(quiz_title)

        self.person_waiting_title.setStyleSheet(
            'QLabel{font-size:30px;font-weight:bold;background-color:#3C3F41;color:#BBBBBB;}'
        )
        self.person_waiting_title.setAlignment(Qt.AlignCenter
                                               | Qt.AlignHCenter)

        self.person_waiting_pin = QLabel()
        self.person_waiting_pin.setText(pin)
        self.person_waiting_pin.setStyleSheet(
            'QLabel{font-size:30px;font-weight:bold;background-color:#3C3F41;color:#BBBBBB;}'
        )
        self.person_waiting_pin.setAlignment(Qt.AlignCenter | Qt.AlignHCenter)

        self.person_waiting_button = QPushButton('start game')
        self.person_waiting_button.clicked.connect(self.play)

        self.person_waiting_box.addWidget(self.person_waiting_title)
        self.person_waiting_box.addWidget(self.person_waiting_pin)
        self.person_waiting_box.addWidget(self.person_waiting_table)
        self.person_waiting_box.addWidget(self.person_waiting_button)

        self.person_waiting_table.setEditTriggers(QTableWidget.NoEditTriggers)
        self.setLayout(self.person_waiting_box)
        self.setStyleSheet(QUIZ_STYLE_SHEET)
        self.setFixedSize(300, 300)

    def play(self):
        if self.person_waiting_table.rowCount() < PLAYERS_NUM_MIN:
            showMsg('нет людей')
            return

        self.curent_window = self.question_window

    def thread_signal(self, url):
        self.thread = HostThread(url, self)
        self.thread.Signal.connect(self.change_window)
        self.thread.finished.connect(self.on_finished)
        self.thread.start()

    def change_window(self, value):
        func = value[0]
        arguments = value[1:]
        func(*arguments)

    def on_finished(self):
        self.thread.Signal.disconnect(self.change_window)
        self.thread.finished.disconnect(self.on_finished)
        self.exit()

    def exit(self):
        global COORDS
        COORDS = [self.x(), self.y()]
        self.quiz_selection_window = QuizSelectionWindow()
        self.quiz_selection_window.show()
        self.close()
Esempio n. 4
0
class View(QDialog):
    def __init__(self, parent):
        super().__init__(parent)
        """Put the dialog window on top and block all windows."""
        self.setWindowModality(Qt.ApplicationModal)

        self.progressBar = QProgressBar(self)
        self.progressBar.setAlignment(Qt.AlignCenter)
        self.progressBar.setValue(0)

        self.btnOpen = QPushButton(Strings.connect)
        self.btnClose = QPushButton(Strings.disconnect)
        self.btnClose.setDisabled(True)
        self.btnExit = QPushButton(Strings.exitLC)
        self.combo = QComboBox()

        self.textConnected = QLabel(Strings.portConnected)
        self.textConnected.setAlignment(Qt.AlignCenter)
        self.textConnected.setFont(QFont("Times", 8, QFont.Bold))

        self.layout = QVBoxLayout(self)

        self.layout.addWidget(self.progressBar)

        self.resize(300, 200)
        self.centerWindowOnScreen()
        self.setWindowTitle(Strings.sprV2)

    def centerWindowOnScreen(self):
        windowGeometry = self.frameGeometry()
        desktopWidget = QDesktopWidget().availableGeometry().center()
        windowGeometry.moveCenter(desktopWidget)
        self.move(windowGeometry.topLeft())

    def mainWindow(self, connected, byConnectButton):
        if byConnectButton == 0:
            self.layout.removeWidget(self.progressBar)
            self.progressBar.deleteLater()

        elif byConnectButton == 1:
            self.layout.removeWidget(self.btnOpen)
            self.btnOpen.deleteLater()
            self.layout.removeWidget(self.btnClose)
            self.btnClose.deleteLater()
            self.layout.removeWidget(self.btnExit)
            self.btnExit.deleteLater()
            self.layout.removeWidget(self.combo)
            self.combo.deleteLater()

        if connected:
            self.textConnected.setText(Strings.portConnected)
            self.textConnected.setStyleSheet('color: green')
            self.layout.addWidget(self.textConnected)

        else:
            self.textConnected.setText(Strings.messagePortNotFound)
            self.textConnected.setStyleSheet('color: red')
            self.layout.addWidget(self.textConnected)
            self.layout.addWidget(self.btnOpen)
            self.layout.addWidget(self.btnClose)
            self.layout.addWidget(self.btnExit)
            self.layout.addWidget(self.combo)

    def setPorts(self, ports):
        self.combo.addItem(Strings.portsUC)

        for port in ports:
            self.combo.addItem(port['port'])

    def setPortFound(self, numberOfIndex):
        self.btnClose.setDisabled(False)
        self.btnOpen.setDisabled(True)
        self.combo.setCurrentIndex(numberOfIndex)
        self.combo.setDisabled(True)

    def setMessageCritical(self, typeMessage, message):
        QMessageBox.critical(self, typeMessage, message)

    def setMessageExistsFile(self):
        loadFile = QMessageBox.question(self, Strings.question,
                                        Strings.messageLoadConfigurationFile,
                                        QMessageBox.Yes | QMessageBox.No,
                                        QMessageBox.No)
        if loadFile == QMessageBox.Yes:
            fileName, _ = QFileDialog.getOpenFileName(
                self, Strings.openFile,
                'C:/Users/' + getpass.getuser() + '/Documents/', '*.cfg')

            if fileName:
                return [True, fileName]

            else:
                return [False, None]

        else:
            return [False, Strings.no]

    def setMessageExit(self):
        exitApp = QMessageBox.question(self, Strings.question,
                                       Strings.messageExit,
                                       QMessageBox.Yes | QMessageBox.No,
                                       QMessageBox.No)

        if exitApp == QMessageBox.Yes:
            return True

        else:
            return False
Esempio n. 5
0
class ProgressBar(QWidget):
    finish = pyqtSignal()

    def __init__(self, flags, *args, **kwargs):
        super().__init__(flags, *args, **kwargs)

        layout = QVBoxLayout()

        self.label = QLabel()
        self.progress_bar = QProgressBar()

        layout.addWidget(self.label, alignment=Qt.AlignCenter)
        layout.addWidget(self.progress_bar)

        self.setLayout(layout)
        self.part = None
        self.base = 0

        self.finish_label = QLabel(kwargs.get('finish_text', 'Завершено'))
        self.finish_button = QPushButton('Закрыть')
        self.finish = self.finish_button.clicked

    def set_part(self, size, length, text):
        if self.part is None:
            if length > 0:
                self.current_tick = 0
                self.current_part_size = length
                self.current_tick_size = size / length
                self.text = text
                self.part = True
            else:
                self.base += size
                self.progress_bar.setValue(self.base)
            QApplication.processEvents()
        else:
            raise ValueError('part is not over')

    def increment(self):
        if self.part is not None:
            self.current_tick += 1
            self.label.setText(
                f'{self.text}: {self.current_tick}/{self.current_part_size}')
            self.base += self.current_tick_size
            self.progress_bar.setValue(int(self.base))
            if self.current_tick == self.current_part_size:
                self.part = None
            QApplication.processEvents()
        else:
            raise ValueError('part is not set')

    def last(self):
        return 100 - self.base

    def abord(self):
        self.part = None
        self.base = 0
        self.progress_bar.setValue(0)
        self.label.setText('Отмена')

    def on_finish(self, msg):
        self.layout().removeWidget(self.label)
        self.finish_label.setText(msg)
        self.layout().removeWidget(self.progress_bar)
        self.layout().addWidget(self.finish_label)
        self.layout().addWidget(self.finish_button)
        self.progress_bar.deleteLater()
        self.label.deleteLater()
        QApplication.processEvents()
        self.finish.emit()