示例#1
0
    def createHead(self):
        self.head.resize(self.initWidth, MainWindow.HEAD_HEIGHT)
        self.head.move(0, 0)

        innerLayout = QHBoxLayout()
        innerLayout.layout().setContentsMargins(0, 0, 0, 0)

        # 间隔
        leftSpace = QLabel("")
        leftSpace.setFixedSize(0, 10)
        innerLayout.addWidget(leftSpace)

        # 左边图标
        icon = QLabel()
        icon.setFixedSize(25, 25)
        icon.setObjectName("icon")

        # 项目名称
        name = QLabel("AI")
        name.setObjectName("projectName")

        # 版本号
        version = QLabel("v1.2021.01.09")
        version.setObjectName("version")

        innerLayout.addWidget(icon)
        innerLayout.addWidget(name)
        innerLayout.addWidget(version)
        innerLayout.addStretch(1)

        innerLayout.setSpacing(10)
        innerLayout.setAlignment(Qt.AlignHCenter)

        self.head.setLayout(innerLayout)

        # 右边
        # 隐藏窗口控件
        dis = ImageView()
        dis.setFixedSize(MainWindow.RIGHT_LABEL_WIDTH, MainWindow.HEAD_HEIGHT)
        dis.setObjectName("dis")
        dis.setCallback(self.clickedEvent)

        # 最大最小化窗口控件
        maxi = ImageView()
        maxi.setFixedSize(MainWindow.RIGHT_LABEL_WIDTH, MainWindow.HEAD_HEIGHT)
        maxi.setObjectName("maxi")
        maxi.setCallback(self.clickedEvent)

        # 关闭窗口控件
        close = ImageView()
        close.setFixedSize(MainWindow.RIGHT_LABEL_WIDTH,
                           MainWindow.HEAD_HEIGHT)
        close.setObjectName("close")
        close.setCallback(self.clickedEvent)

        innerLayout.addStretch(0)

        innerLayout.addWidget(dis)
        innerLayout.addWidget(maxi)
        innerLayout.addWidget(close)
示例#2
0
    def createHead(self):
        self.head.resize(self.initWidth, MainWindow.HEAD_HEIGHT)
        self.head.move(0, 0)

        innerLayout = QHBoxLayout()
        innerLayout.layout().setContentsMargins(0, 0, 0, 0)

        self.head.setLayout(innerLayout)

        adjust = TextView("校准")
        adjust.setObjectName("adjust")
        adjust.setFixedSize(MainWindow.RIGHT_LABEL_WIDTH,
                            MainWindow.HEAD_HEIGHT)
        adjust.setAlignment(Qt.AlignCenter)
        adjust.setMousePressCallback(self.clickedEvent)

        # 右边
        # 隐藏窗口控件
        dis = ImageView()
        dis.setFixedSize(MainWindow.RIGHT_LABEL_WIDTH, MainWindow.HEAD_HEIGHT)
        dis.setObjectName("dis")
        dis.setCallback(self.clickedEvent)

        # 最大最小化窗口控件
        maxi = ImageView()
        maxi.setFixedSize(MainWindow.RIGHT_LABEL_WIDTH, MainWindow.HEAD_HEIGHT)
        maxi.setObjectName("maxi")
        maxi.setCallback(self.clickedEvent)

        # 关闭窗口控件
        close = ImageView()
        close.setFixedSize(MainWindow.RIGHT_LABEL_WIDTH,
                           MainWindow.HEAD_HEIGHT)
        close.setObjectName("close")
        close.setCallback(self.clickedEvent)
        close.setDoubleClick(self.doubleClickEvent)

        innerLayout.addStretch(0)

        innerLayout.addWidget(adjust)
        innerLayout.addWidget(dis)
        innerLayout.addWidget(maxi)
        innerLayout.addWidget(close)
示例#3
0
    def initUI(self):
        self.inputGroup0 = QGroupBox()
        self.inputGroup0.setLayout(QHBoxLayout())
        self._parameterButton = QRadioButton("Parameter")
        self._txtButton = QRadioButton("NDVI Series File(.txt)")
        self._soilButton = QRadioButton("Soil Line")
        self._parameterButton.setChecked(True)

        self._parameterButton.toggled.connect(self.toggledClicked)
        self._txtButton.toggled.connect(self.toggledClicked)
        self._soilButton.toggled.connect(self.toggledClicked)

        self.inputGroup0.layout().addWidget(self._parameterButton)
        self.inputGroup0.layout().addWidget(self._txtButton)
        self.inputGroup0.layout().addWidget(self._soilButton)
        self.inputGroup0.setTitle('Select one import method')

        initial_p = ParameterItem("initial parameter")
        self.aEdit = QTextEdit()
        self.aEdit.setText(str(initial_p.a))
        self.aEdit.setFixedSize(80, 30)
        aLable = QLabel('a:')
        aLable.setFixedSize(30, 30)

        self.bEdit = QTextEdit()
        self.bEdit.setText(str(initial_p.b))
        self.bEdit.setFixedSize(80, 30)
        bLable = QLabel('b:')
        bLable.setFixedSize(30, 30)

        self.cEdit = QTextEdit()
        self.cEdit.setText(str(initial_p.c))
        self.cEdit.setFixedSize(80, 30)
        cLable = QLabel('c:')
        cLable.setFixedSize(30, 30)

        self.dEdit = QTextEdit()
        self.dEdit.setText(str(initial_p.d))
        self.dEdit.setFixedSize(80, 30)
        dLable = QLabel('d:')
        dLable.setFixedSize(30, 30)

        self.a_downEdit = QTextEdit()
        self.a_downEdit.setFixedSize(80, 30)
        self.a_downEdit.setText(str(initial_p.a_down))
        a_downLabel = QLabel('a_down:')
        a_downLabel.setFixedSize(80, 30)

        self.b_downEdit = QTextEdit()
        self.b_downEdit.setFixedSize(80, 30)
        self.b_downEdit.setText(str(initial_p.b_down))
        b_downLabel = QLabel('b_down:')
        b_downLabel.setFixedSize(80, 30)

        self.weigthEdit = QTextEdit()
        self.weigthEdit.setFixedSize(80, 30)
        self.weigthEdit.setText('0.5')
        weigthLabel = QLabel('weight:')
        weigthLabel.setFixedSize(80, 30)

        self.threEdit = QTextEdit()
        self.threEdit.setFixedSize(80, 30)
        self.threEdit.setText('0.092')
        threLabel = QLabel('threshold:')
        threLabel.setFixedSize(60, 30)

        vbox = QGridLayout()
        vbox.setSpacing(10)
        vbox.addWidget(aLable, 1, 1)
        vbox.addWidget(self.aEdit, 1, 2)
        vbox.addWidget(bLable, 1, 3)
        vbox.addWidget(self.bEdit, 1, 4)
        vbox.addWidget(cLable, 1, 5)
        vbox.addWidget(self.cEdit, 1, 6)
        vbox.addWidget(dLable, 2, 1)
        vbox.addWidget(self.dEdit, 2, 2)
        vbox.addWidget(a_downLabel, 2, 3)
        vbox.addWidget(self.a_downEdit, 2, 4)
        vbox.addWidget(b_downLabel, 2, 5)
        vbox.addWidget(self.b_downEdit, 2, 6)

        NDVIPath = QLabel('Path:')
        self.pathEdit = QLineEdit()
        pathInputButton = QPushButton("Open")
        pathInputButton.clicked.connect(self.inputPath)

        hbox3 = QHBoxLayout()
        hbox3.setSpacing(5)
        hbox3.addWidget(NDVIPath)
        hbox3.addWidget(self.pathEdit)
        hbox3.addWidget(pathInputButton)

        self.inputGroup1 = QGroupBox()
        self.inputGroup1.setTitle('Input NDVI simulation parameter')
        self.inputGroup1.setLayout(vbox)
        # self.inputGroup2.setFixedSize(self.width(), 200)

        self.inputGroup2 = QGroupBox()
        self.inputGroup2.setTitle('Input NDVI Series (.txt)')
        self.inputGroup2.setLayout(hbox3)
        # self.inputGroup2.setFixedSize(self.width(), 100)

        self.okButton = QPushButton("Confirm")
        self.okButton.setFixedSize(80, 30)
        self.okButton.clicked.connect(self.confirmClick)
        self.cancelButton = QPushButton("Cancel")
        self.cancelButton.setFixedSize(80, 30)
        self.cancelButton.clicked.connect(self.cancerClick)
        self.previewlButton = QPushButton("Preview")
        self.previewlButton.setFixedSize(80, 30)
        self.previewlButton.clicked.connect(self.perviewClick)
        self.resetButton = QPushButton("Reset")
        self.resetButton.setFixedSize(80, 30)
        self.resetButton.clicked.connect(self.resetClick)

        hbox4 = QHBoxLayout()
        hbox4.addStretch(1)
        hbox4.addWidget(self.previewlButton)
        hbox4.addWidget(self.resetButton)
        hbox4.addWidget(self.okButton)
        hbox4.addWidget(self.cancelButton)
        self.inputGroup3 = QGroupBox()
        self.inputGroup3.setLayout(hbox4)
        self.inputGroup3.setTitle('Action Buttons')

        self.previewPicture = QLabel()
        self.previewPicture.setFixedSize(450, 400)
        self.Btn_GUDtime = QPushButton("GUD time right shift")
        self.Btn_GUDtime.clicked.connect(
            lambda: self.__timeShiftClick(value=5))
        self.Btn_NDVImax = QPushButton("mix NDVI Down")
        self.Btn_NDVImax.clicked.connect(
            lambda: self.__NDVImaxShiftClick(value=0.05))
        self.Btn_NDVImin = QPushButton("min NDVI Up")
        self.Btn_NDVImin.clicked.connect(
            lambda: self.__NDVIminShiftClick(value=0.05))

        self.Btn_GUDtime_vers = QPushButton("GUD time left shift")
        self.Btn_GUDtime_vers.clicked.connect(
            lambda: self.__timeShiftClick(value=-5))
        self.Btn_NDVImax_vers = QPushButton("mix NDVI Up")
        self.Btn_NDVImax_vers.clicked.connect(
            lambda: self.__NDVImaxShiftClick(value=-0.05))
        self.Btn_NDVImin_vers = QPushButton("min NDVI Down")
        self.Btn_NDVImin_vers.clicked.connect(
            lambda: self.__NDVIminShiftClick(value=-0.05))
        self.inputGroup4 = QGroupBox()

        inputGroup4left = QGroupBox()
        inputGroup4left.setTitle("Preview Image")
        inputGroup4leftLayout = QGridLayout()
        inputGroup4leftLayout.setSpacing(10)
        inputGroup4leftLayout.addWidget(self.previewPicture, 2, 1, 1, 4)
        inputGroup4leftLayout.addWidget(weigthLabel, 1, 1)
        inputGroup4leftLayout.addWidget(self.weigthEdit, 1, 2)
        inputGroup4leftLayout.addWidget(threLabel, 1, 3)
        inputGroup4leftLayout.addWidget(self.threEdit, 1, 4)
        inputGroup4left.setLayout(inputGroup4leftLayout)

        self.inputGroup4right = QGroupBox()
        self.inputGroup4right.setTitle("Change NDVI Series Buttons")
        inputGroup4rightLayout = QVBoxLayout()
        inputGroup4rightLayout.addWidget(self.Btn_GUDtime)
        inputGroup4rightLayout.addWidget(self.Btn_GUDtime_vers)
        inputGroup4rightLayout.addWidget(self.Btn_NDVImax)
        inputGroup4rightLayout.addWidget(self.Btn_NDVImax_vers)
        inputGroup4rightLayout.addWidget(self.Btn_NDVImin_vers)
        inputGroup4rightLayout.addWidget(self.Btn_NDVImin)

        self.inputGroup4right.setLayout(inputGroup4rightLayout)

        hbox5 = QHBoxLayout()
        hbox5.layout().addWidget(inputGroup4left)
        hbox5.layout().addWidget(self.inputGroup4right)
        self.inputGroup4.setLayout(hbox5)

        self.setGeometry(300, 300, self.width(), 500)
        self.setLayout(QVBoxLayout())

        self.layout().addWidget(self.inputGroup0)
        self.layout().addWidget(self.inputGroup1)
        self.layout().addWidget(self.inputGroup2)
        self.layout().addWidget(self.inputGroup3)
        self.layout().addWidget(self.inputGroup4)
        self.inputGroup2.setEnabled(False)
        self.setWindowTitle('Import')
        self.show()
示例#4
0
class QWInfoPanel(QWidget):
    """QWidget for information panel"""
    def __init__(self, **kwa):

        QWidget.__init__(self, kwa.get('parent', None))

        self.fname = kwa.get('fname_info', FNAME_INFO_DEF)
        self.count_empty = 0

        self.winfo = QTextEdit('Info panel')
        self.but_save = QPushButton('Save')
        self.but_clear = QPushButton('Clear')
        self.but_save.clicked.connect(self.on_but_save)
        self.but_clear.clicked.connect(self.on_but_clear)

        self.hbox = QHBoxLayout()
        self.hbox.addStretch(1)
        self.hbox.addWidget(self.but_save)
        self.hbox.addWidget(self.but_clear)

        self.vbox = QVBoxLayout()
        self.vbox.addLayout(self.hbox)
        self.vbox.addWidget(self.winfo)
        self.setLayout(self.vbox)

        self.set_tool_tips()
        self.set_style()

    def set_tool_tips(self):
        self.but_save.setToolTip('Save info panel content in file')
        self.but_clear.setToolTip('Clean info panel')

    def set_style(self):
        icon.set_icons()
        self.but_save.setIcon(icon.icon_save)
        self.but_save.setFixedWidth(60)
        self.but_clear.setFixedWidth(60)
        self.layout().setContentsMargins(0, 0, 0, 0)
        self.hbox.layout().setContentsMargins(2, 2, 2, 0)

        w = self.winfo
        w.setReadOnly(True)
        w.setFont(QFont('monospace'))

    def set_info_filename(self, fname=FNAME_INFO_DEF):
        self.fname = fname

    def on_but_save(self):
        logger.debug('on_but_save')
        fname = self.fname
        s = self.winfo.toPlainText()
        resp = confirm_or_cancel_dialog_box(parent=self,
                                            text='save info in file: %s' %
                                            fname,
                                            title='Confirm or cancel')
        logger.debug('file saving is confirmed: %s' % str(resp))
        if resp: save_textfile(str(s), fname, mode='w')

    def on_but_clear(self):
        logger.debug('on_but_clear')
        self.winfo.clear()
        self.count_empty = 0

    def remove_last_line(self):
        """trick removing last line"""
        w = self.winfo
        curspos = w.textCursor()
        w.moveCursor(QTextCursor.End, QTextCursor.MoveAnchor)
        w.moveCursor(QTextCursor.StartOfLine, QTextCursor.MoveAnchor)
        w.moveCursor(QTextCursor.End, QTextCursor.KeepAnchor)
        w.textCursor().removeSelectedText()
        w.textCursor().deletePreviousChar()
        w.setTextCursor(curspos)

    def append(self, s, fname=FNAME_INFO_DEF):
        is_empty_record = not s
        if is_empty_record:
            self.count_empty += 1
            s = '%s times buffer is empty - click on stop' % str(
                self.count_empty)

            if self.count_empty > 5: self.remove_last_line()
            #self.winfo.insertPlainText(s)
        #else:
        self.winfo.append(str(s))
        #self.winfo.insertPlainText(s)
        self.winfo.moveCursor(QTextCursor.End)  #, QTextCursor.KeepAnchor)
        self.winfo.repaint()
        self.fname = fname
        #self.raise_()

    if __name__ == "__main__":

        def test_append(self, nlines=5):
            s = '== test_append'
            for i in range(nlines):
                s += '\n  line %04d' % i
            self.append(s)

        def keyPressEvent(self, e):
            logger.info('keyPressEvent, key=%s' % e.key())
            from PyQt5.QtCore import Qt
            if e.key() == Qt.Key_Escape: self.close()
            elif e.key() == Qt.Key_A: self.test_append()
            else:                logger.info('Keys:'\
                 '\n  ESC - exit'\
                 '\n  A - append info'\
                 '\n')
    btnRemNode = QPushButton("Rem Node")
    btnRemNode.setCheckable(True)
    btnRemNode.clicked.connect(rem_node)
    hpanel.addWidget(btnRemNode)
    buttons_list.append(btnRemNode)

    btnAddEdge = QPushButton("Add Edge")
    btnAddEdge.setCheckable(True)
    btnAddEdge.clicked.connect(add_edge)
    hpanel.addWidget(btnAddEdge)
    buttons_list.append(btnAddEdge)

    btnRemEdge = QPushButton("Rem Edge")
    btnRemEdge.setCheckable(True)
    btnRemEdge.clicked.connect(rem_edge)
    hpanel.addWidget(btnRemEdge)
    buttons_list.append(btnRemEdge)

    # Add vertical layout(show toggles)
    vpanel = QVBoxLayout()
    hpanel.layout().addLayout(vpanel)

    #hpanel.addWidget(btnNew)
    vpanel.addWidget(chkBx)
    vpanel.addWidget(chkBx2)
    vpanel.addWidget(chkBx3)
    vpanel.addWidget(chkBx4)

    w.showMaximized()

    sys.exit(app.exec_())
示例#6
0
class QA_system_window(QWidget):
    def __init__(self, title, width=800, height=600):
        super().__init__()
        self.title = title
        self.state = None
        self.width = 800
        self.height = 600
        self.server = None
        self.data_path = r'./data/new_tairo_dataset2.xlsx'
        # self.data = pd.read_excel(r'./data/new_tairo_dataset2.xlsx', keep_default_na=False)
        self.initUI()

    def initUI(self):
        self.setWindowTitle(self.title)
        self.setMinimumSize(640, 480)
        self.resize(self.width, self.height)

        self.tableWidget = self.createTable()
        self.keyword_layout = self.createKeyword()

        # Add box layout, add table to box layout and add box layout to widget

        self.main_layout = QHBoxLayout()
        button_layout = QVBoxLayout()
        view_data_btn = QPushButton("顯示資料庫資料")
        view_badness_btn = QPushButton("顯示需要改進資料")
        add_keyword_btn = QPushButton('加入關鍵字')
        add_similarity_word_btn = QPushButton('加入相似詞')
        start_server_btn = QPushButton("啟動伺服器")
        start_training_btn = QPushButton("啟動訓練")

        button_layout.addWidget(view_data_btn)
        button_layout.addWidget(view_badness_btn)
        button_layout.addWidget(add_keyword_btn)
        button_layout.addWidget(add_similarity_word_btn)
        button_layout.addWidget(start_server_btn)
        button_layout.addWidget(start_training_btn)

        view_data_btn.clicked.connect(self._swap_to_all_data)
        start_server_btn.clicked.connect(self._swap_to_start_server)
        add_keyword_btn.clicked.connect(self._swap_to_add_keyword)

        table = QVBoxLayout()

        self.main_layout.addLayout(button_layout)
        # self.main_layout.addLayout(self.keyword_layout)
        self.main_layout.addLayout(table)

        self.gg = QTableWidget()

        self.state = self.gg

        table.addWidget(self.gg)
        io_layout = QHBoxLayout()
        save_btn = QPushButton("儲存")
        save_btn.clicked.connect(self.save_method)
        cancel_btn = QPushButton('取消')
        cancel_btn.clicked.connect(self.cancel_method)
        io_layout.addWidget(save_btn)
        io_layout.addWidget(cancel_btn)
        table.addLayout(io_layout)
        # self.main_layout.replaceWidget(QTableWidget(), self.tableWidget)
        self.setLayout(self.main_layout)

        # Show widget
        self.show()

    @pyqtSlot()
    def _swap_to_all_data(self):
        if self.state is not self.tableWidget:
            self.main_layout.children()[1].replaceWidget(
                self.state, self.tableWidget)
            self.state = self.tableWidget
        else:
            pass

    @pyqtSlot()
    def _swap_to_add_keyword(self):
        self.main_layout.layout().layout

        if self.state is not self.keyword_widget:
            self.main_layout.lay
            self.main_layout.children()[1] = self.keyword_layout
            self.state = self.keyword_widget
        else:
            pass

    @pyqtSlot()
    def _swap_to_add_similarity_word(self):
        if self.state is not self.tableWidget:
            self.state = self.tableWidget
            # self.main_layout.replaceWidget(QTableWidget(), self.tableWidget)
            # print(self.main_layout.children()[1])
            self.main_layout.children()[1].replaceWidget(
                self.gg, self.tableWidget)
        else:
            pass

    @pyqtSlot()
    def _swap_to_start_server(self):
        def thread_job():
            bottle.run(host="140.118.127.51",
                       port="8080",
                       server='waitress',
                       debug=False)

        if self.server is None:
            self.server = threading.Thread(target=thread_job)
            self.server.start()

        else:
            QMessageBox.information(self, 'Message', '伺服器已啟動!')

    @pyqtSlot()
    def _swap_to_start_training(self):
        if self.state is not self.tableWidget:
            self.state = self.tableWidget
            # self.main_layout.replaceWidget(QTableWidget(), self.tableWidget)
            # print(self.main_layout.children()[1])
            self.main_layout.children()[1].replaceWidget(
                self.gg, self.tableWidget)
        else:
            pass

    def createTable(self):
        #load data
        self.data = pd.read_excel(self.data_path, keep_default_na=False)

        # Create table
        tableWidget = QTableWidget()
        tableWidget.setRowCount(self.data.shape[0] + 3)
        tableWidget.setColumnCount(self.data.shape[1])

        for index, column in enumerate(self.data.columns):
            tableWidget.setHorizontalHeaderItem(index,
                                                QTableWidgetItem(column))

        for column_index in range(self.data.shape[1]):
            for row_index in range(self.data.shape[0]):
                tableWidget.setItem(
                    row_index, column_index,
                    QTableWidgetItem(
                        str(self.data.iloc[row_index, column_index])))

        # table selection change
        tableWidget.cellChanged.connect(self.add_row)

        return tableWidget

    def createKeyword(self):
        keyword_widget = QFormLayout()
        keyword_widget.addRow(QLabel('字'), QLineEdit())
        keyword_widget.addRow(QLabel('詞性'), QLineEdit())

        return keyword_widget

    @pyqtSlot()
    def add_row(self):
        for selected_item in self.tableWidget.selectedItems():
            if selected_item.text(
            ) != "" and self.tableWidget.rowCount() - selected_item.row() < 3:
                self.tableWidget.insertRow(self.tableWidget.rowCount())

    @pyqtSlot()
    def cancel_method(self):
        self.tableWidget = self.createTable()
        self.main_layout.children()[1].replaceWidget(self.state,
                                                     self.tableWidget)
        self.state = self.tableWidget

    @pyqtSlot()
    def save_method(self):
        for row_index in range(self.tableWidget.rowCount()):
            if self.tableWidget.item(row_index, 0) is not None:
                self.data.loc[row_index] = [
                    self.tableWidget.item(row_index, column_index).text()
                    for column_index in range(self.tableWidget.columnCount())
                ]

        self.data.to_excel(r'./data/test4444444.xlsx', index=False)
        print('ggg')

    @pyqtSlot()
    def on_click(self):
        print("\n")