示例#1
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")