Ejemplo n.º 1
0
class Page(QWidget):
    call_exit = Signal(
        str
    )  # arg is function name (self.func.__name__) for each page in pages

    def __init__(
        self,
        func=None,
        func_args=[],
        func_kwargs={},
        margin=30,
        vert_spacing=10,
        current_layout="TopBottomLayout",
        description="",
        single_pass: bool = False,
        *args,
        **kwargs
    ):
        super().__init__()

        # static definitions
        self.func = func
        self.args = func_args
        self.kwargs = func_kwargs
        self.widget_list = []
        self.margin = margin
        self.vert_spacing = vert_spacing
        self.single_pass = single_pass
        self.stdout = sys.stdout
        self.stderr = sys.stderr
        self.Current_Layout = layouts.Layout_Dict["TopBottomLayout"]
        if current_layout in layouts.Layout_Dict:
            self.Current_Layout = layouts.Layout_Dict[current_layout](self)
        # Initiallize
        self.canvas = QWidget()
        self.canvas.setObjectName("canvas")

        # create a scroll bar
        self.widget_scroll = QScrollArea(self)
        self.widget_scroll.setObjectName("widget_scroll")

        # use a QFormLayout to place widgets
        self.canvas_layout = QFormLayout()
        self.canvas_layout.setObjectName("canvas_layout")

        # set canvas_layout
        self.canvas_layout.setMargin(self.margin)
        self.canvas_layout.setSpacing(self.vert_spacing)
        self.canvas_layout.setRowWrapPolicy(self.canvas_layout.WrapAllRows)

        # default description is func.__doc__
        self.description = QLabel(
            self.getDescription(description)
        )  # doesn't need to scroll
        self.description.setParent(self)
        self.description.setWordWrap(True)
        self.description.setTextFormat(Qt.MarkdownText)
        self.description.setOpenExternalLinks(True)

        # create a Run button to excute the function
        self.run_button = QPushButton("&Run", self)
        self.run_button.clicked.connect(self.Run)
        self.run_button.adjustSize()

        # allow the user to run the func multiple times to test output
        # but only the last return is delivered (as a confirmed run)
        self.run_thread = RunThread(self.func, self.args, self.kwargs)
        self.run_thread.finished.connect(self.Done)

    def getDescription(self, pre_defined_desc: str = ""):
        """
        returns the description of current page.
        """
        if pre_defined_desc.strip(" \r\n") != "":
            return pre_defined_desc
        if self.func == None:
            log.error("No backend function found")
            return ""
        docstring = self.func.__doc__.strip(" \r\n\t")
        if docstring == "":
            log.warning("Bad docstring for function {0}".format(self.func.__name__))
            return "function {0}".format(self.func.__name__)

        # suppose "------" is the splitor between function description and arguments description
        # in numpy-style docstring, "------" has "Parameter" before it.
        # match it with "[a-zA-Z_]*?[\n\r]*?".
        desc_part = re.match(
            r"([\S\s\n\r]+?)[a-z_]*?[\n\r\s]*?------", docstring, re.M | re.I
        )
        if desc_part == None:
            log.info("whole description:\n{0}".format(docstring))
            return docstring
        log.info("recognized description:\n{0}".format(desc_part.group(1)))
        return desc_part.group(1)

    ### slot functions
    def Run(self):
        """
        Run the function(self.func) in another thread(self.run_thread).
        """
        # load args
        for i in self.widget_list:
            self.kwargs.update({i.objectName(): i.getValue()})

        # redirect standard output
        self.output_dialog = output_dialog.OutputDialog(self.func.__name__, parent=self)
        sys.stdout = self.output_dialog
        sys.stderr = self.output_dialog

        # avoid multiple clicks
        self.run_button.setText("Running...")
        self.run_button.setEnabled(False)
        self.run_thread.start()
        log.info('func "{0}" started'.format(self.func.__name__))

        self.output_dialog.exec_()

    def Done(self):
        """
        Done is called when the function is finished(i.e. self.run_thread.finished is omitted)
        Restore the run button.
        """
        log.info('func "{0}" ended'.format(self.func.__name__))
        self.output_dialog.setWindowTitle(
            "Output of {0} - returns {1}".format(
                self.func.__name__, self.run_thread.ret
            )
        )
        self.output_dialog.revive()
        self.run_button.setText("Run")
        self.run_button.setEnabled(True)
        if self.single_pass:
            self.call_exit.emit(self.func.__name__)
Ejemplo n.º 2
0
class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        if not MainWindow.objectName():
            MainWindow.setObjectName("MainWindow")
        MainWindow.resize(1121, 770)

        self.centralwidget = QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")

        self.scrollArea = QScrollArea(MainWindow)
        self.scrollArea.setObjectName("scrollArea")
        self.scrollArea.setGeometry(QRect(10, 10, 1101, 531))
        self.scrollArea.setWidgetResizable(True)
        self.scrollAreaWidgetContents = QWidget()
        self.scrollAreaWidgetContents.setObjectName("scrollAreaWidgetContents")
        self.scrollAreaWidgetContents.setGeometry(QRect(0, 0, 1099, 529))
        self.scrollArea.setWidget(self.scrollAreaWidgetContents)

        self.tableWidget = QTableWidget(self.scrollAreaWidgetContents)
        self.tableWidget.setObjectName("tableWidget")
        self.tableWidget.setGeometry(QRect(0, 0, 1099, 529))
        self.tableWidget.setAutoFillBackground(True)
        self.tableWidget.horizontalHeader().setCascadingSectionResizes(False)
        self.tableWidget.setColumnCount(24) 
        self.column_label = ['begin', 'end', 'time interval', 'login', 'mac ab', 'ULSK1', 'BRAS ip', 'start count', 'alive count',
                            'stop count', 'incoming', 'outcoming', 'error_count', 'code 0', 'code 1011', 'code 1100', 'code -3',
                            'code -52', 'code -42', 'code -21', 'code -40', ' code -44', 'code -46', ' code -38']
        self.tableWidget.setHorizontalHeaderLabels(self.column_label)
        
        self.PathFile = QLineEdit(self.centralwidget)
        self.PathFile.setGeometry(QRect(200, 10, 831, 90))
        self.PathFile.setObjectName("PathFile")

        self.progressBar_2 = QProgressBar(MainWindow)
        self.progressBar_2.setObjectName("progressBar_2")
        self.progressBar_2.setGeometry(QRect(400, 590, 651, 23))
        self.progressBar_2.setProperty("value", 0)

        self.progressBar = QProgressBar(MainWindow)
        self.progressBar.setObjectName("progressBar")
        self.progressBar.setGeometry(QRect(400, 650, 651, 23))
        self.progressBar.setProperty("value", 0)

        self.comboBox = QComboBox(MainWindow)
        self.comboBox.addItem("")
        self.comboBox.addItem("")
        self.comboBox.addItem("")
        self.comboBox.setObjectName("comboBox")
        self.comboBox.setGeometry(QRect(20, 690, 161, 28))
        self.comboBox.setEditable(False)
        self.comboBox.setDuplicatesEnabled(False)

        self.dateTimeEdit = QDateTimeEdit(MainWindow)
        self.dateTimeEdit.setObjectName("dateTimeEdit")
        self.dateTimeEdit.setGeometry(QRect(190, 690, 151, 28))
        self.dateTimeEdit.setCurrentSection(QDateTimeEdit.DaySection)
        

        self.saveButt = QPushButton(self.centralwidget)
        self.saveButt.setGeometry(QRect(20, 610, 321, 28))
        self.saveButt.setObjectName("saveButt")

        self.AnalizButt = QPushButton(self.centralwidget)
        self.AnalizButt.setGeometry(QRect(20, 570, 321, 28))
        self.AnalizButt.setObjectName("AnalizButt")
        
        self.OpenButt = QPushButton(self.centralwidget)
        self.OpenButt.setGeometry(QRect(400, 710, 615, 40))
        self.OpenButt.setObjectName("OpenButt")

        self.change_cbButt = QPushButton(self.centralwidget)
        self.change_cbButt.setObjectName("change_cbButt")
        self.change_cbButt.setGeometry(QRect(20, 730, 321, 28))

        self.change_sizeButt = QPushButton(self.centralwidget)
        self.change_sizeButt.setObjectName(u"change_sizeButt")
        self.change_sizeButt.setGeometry(QRect(20, 650, 161, 28))

        self.change_sizeLine = QLineEdit(self.centralwidget)
        self.change_sizeLine.setObjectName("change_sizeLine")
        self.change_sizeLine.setGeometry(QRect(190, 650, 151, 28))

        self.OpenButt.raise_()
        self.AnalizButt.raise_()
        self.change_cbButt.raise_()
        self.progressBar.raise_()
        self.PathFile.raise_()
        self.tableWidget.raise_()
        self.saveButt.raise_()
        self.comboBox.raise_()
        self.dateTimeEdit.raise_()
        self.change_sizeButt.raise_()

        MainWindow.setCentralWidget(self.centralwidget)
        self.retranslateUi(MainWindow)

        QMetaObject.connectSlotsByName(MainWindow)
    # setupUi

    def retranslateUi(self, MainWindow):
        MainWindow.setWindowTitle(QCoreApplication.translate("MainWindow", "MainWindow", None))
#if QT_CONFIG(accessibility)
        self.tableWidget.setAccessibleName("")
#endif // QT_CONFIG(accessibility)
        self.comboBox.setItemText(0, QCoreApplication.translate("MainWindow", "Парамметры выборки", None))
        self.comboBox.setItemText(1, QCoreApplication.translate("MainWindow", "Выборка по логину", None))
        self.comboBox.setItemText(2, QCoreApplication.translate("MainWindow", "Выборка по дате", None))
        self.comboBox.setCurrentText(QCoreApplication.translate("MainWindow", "\u041f\u043e\u043b\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a", None))
        self.comboBox.setPlaceholderText("")
        self.dateTimeEdit.setDisplayFormat(QCoreApplication.translate("MainWindow", "dd.MM.yyyy H:mm:ss"))
        self.saveButt.setText(QCoreApplication.translate("MainWindow", "Сохранить данные", None))
        self.OpenButt.setText(QCoreApplication.translate("MainWindow", "Выбрать папку", None))
        self.change_cbButt.setText(QCoreApplication.translate("MainWindow", "Изменить парамметры", None))
        self.AnalizButt.setText(QCoreApplication.translate("MainWindow", "Анализировать", None))
        self.change_sizeLine.setPlaceholderText(QCoreApplication.translate("MainWindow", "1-1000", None))
        self.change_sizeButt.setText(QCoreApplication.translate("MainWindow", u"Изменить выборку", None))
Ejemplo n.º 3
0
class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        if not MainWindow.objectName():
            MainWindow.setObjectName("MainWindow")
        MainWindow.resize(1050, 700)

        self.centralwidget = QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")

        self.scrollArea = QScrollArea(MainWindow)
        self.scrollArea.setObjectName("scrollArea")
        self.scrollArea.setGeometry(QRect(10, 10, 1030, 530))
        self.scrollArea.setWidgetResizable(True)
        self.scrollAreaWidgetContents = QWidget()
        self.scrollAreaWidgetContents.setObjectName("scrollAreaWidgetContents")
        self.scrollAreaWidgetContents.setGeometry(QRect(0, 0, 1030, 530))
        self.scrollArea.setWidget(self.scrollAreaWidgetContents)

        self.tableWidget = QTableWidget(self.scrollAreaWidgetContents)
        self.tableWidget.setObjectName("tableWidget")
        self.tableWidget.setGeometry(QRect(0, 0, 1030, 530))
        self.tableWidget.setAutoFillBackground(True)
        self.tableWidget.horizontalHeader().setCascadingSectionResizes(True)
        self.tableWidget.setColumnCount(7)
        self.column_label = ['№', 'name', 'fname', 'phone', 'uid', 'nik', 'wo']
        self.tableWidget.setHorizontalHeaderLabels(self.column_label)

        self.PathFile = QLineEdit(self.centralwidget)
        self.PathFile.setGeometry(QRect(200, 10, 831, 90))
        self.PathFile.setObjectName("PathFile")

        self.progressBar = QProgressBar(MainWindow)
        self.progressBar.setObjectName("progressBar")
        self.progressBar.setGeometry(QRect(400, 650, 640, 28))
        self.progressBar.setProperty("value", 0)

        self.comboBox = QComboBox(MainWindow)
        self.comboBox.addItem("")
        self.comboBox.addItem("")
        self.comboBox.addItem("")
        self.comboBox.addItem("")
        self.comboBox.setObjectName("comboBox")
        self.comboBox.setGeometry(QRect(20, 610, 321, 28))
        self.comboBox.setEditable(False)
        self.comboBox.setDuplicatesEnabled(False)

        self.comboBox_2 = QComboBox(self.centralwidget)
        self.comboBox_2.setGeometry(QRect(20, 570, 321, 28))
        self.comboBox_2.setObjectName("comboBox2")
        self.comboBox_2.addItem("")

        self.saveButt = QPushButton(self.centralwidget)
        self.saveButt.setGeometry(QRect(560, 610, 160, 28))
        self.saveButt.setObjectName("saveButt")

        self.AnalizButt = QPushButton(self.centralwidget)
        self.AnalizButt.setGeometry(QRect(400, 610, 160, 28))
        self.AnalizButt.setObjectName("AnalizButt")

        self.UpdateButt = QPushButton(self.centralwidget)
        self.UpdateButt.setGeometry(QRect(720, 610, 160, 28))
        self.UpdateButt.setObjectName("updateButt")

        self.DeleteButt = QPushButton(self.centralwidget)
        self.DeleteButt.setGeometry(QRect(880, 610, 160, 28))
        self.DeleteButt.setObjectName("DeleteButt")

        self.OpenBox = QComboBox(MainWindow)
        self.OpenBox.addItem("")
        self.OpenBox.addItem("")
        self.OpenBox.addItem("")
        self.OpenBox.setObjectName("OpenBox")
        self.OpenBox.setGeometry(QRect(400, 570, 160, 30))
        self.OpenBox.setEditable(False)
        self.OpenBox.setDuplicatesEnabled(False)

        self.change_cbButt = QPushButton(self.centralwidget)
        self.change_cbButt.setObjectName("change_cbButt")
        self.change_cbButt.setGeometry(QRect(20, 650, 321, 28))

        self.OpenBox.raise_()
        self.UpdateButt.raise_()
        self.AnalizButt.raise_()
        self.DeleteButt.raise_()
        self.change_cbButt.raise_()
        self.progressBar.raise_()
        self.PathFile.raise_()
        self.tableWidget.raise_()
        self.saveButt.raise_()
        self.comboBox.raise_()
        self.comboBox_2.raise_()

        MainWindow.setCentralWidget(self.centralwidget)
        self.retranslateUi(MainWindow)

        QMetaObject.connectSlotsByName(MainWindow)

    # setupUi

    def retranslateUi(self, MainWindow):
        MainWindow.setWindowTitle(
            QCoreApplication.translate("MainWindow", "MainWindow", None))
        #if QT_CONFIG(accessibility)
        self.tableWidget.setAccessibleName("")
        #endif // QT_CONFIG(accessibility)
        self.comboBox.setItemText(
            0, QCoreApplication.translate("MainWindow", "Поиск по ...", None))
        self.comboBox.setItemText(
            1,
            QCoreApplication.translate("MainWindow", "Поиск по никнейму",
                                       None))
        self.comboBox.setItemText(
            2,
            QCoreApplication.translate("MainWindow",
                                       "Поиск по номеру телефона", None))
        self.comboBox.setItemText(
            3,
            QCoreApplication.translate("MainWindow", "Поиск по фамилии", None))
        self.comboBox.setCurrentText(
            QCoreApplication.translate(
                "MainWindow",
                "\u041f\u043e\u043b\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a",
                None))
        self.comboBox.setPlaceholderText("")
        self.saveButt.setText(
            QCoreApplication.translate("MainWindow", "Сохранить данные", None))
        self.OpenBox.setItemText(
            0,
            QCoreApplication.translate("MainWindow", "Загрузить данные", None))
        self.OpenBox.setItemText(
            1, QCoreApplication.translate("MainWindow", "Выбрать папку", None))
        self.OpenBox.setItemText(
            2, QCoreApplication.translate("MainWindow", "Ввести данные", None))
        self.change_cbButt.setText(
            QCoreApplication.translate("MainWindow", "Изменить парамметры",
                                       None))
        self.DeleteButt.setText(
            QCoreApplication.translate("MainWindow", "Удалить данные", None))
        self.UpdateButt.setText(
            QCoreApplication.translate("MainWindow", "Обновить данные", None))
        self.AnalizButt.setText(
            QCoreApplication.translate("MainWindow", "Анализировать", None))
        self.comboBox_2.setItemText(
            0, QCoreApplication.translate("MainWindow", "1 - 100", None))