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)
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)
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()
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_())
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")