def analise1(self): A = self.get_A() if A.any() == None: QMessageBox.warning(w, 'Error', 'Error parsing matrix') # researching A cognitiveModel = CognitiveModel(A) results = 'Власні числа: \n' results += ' '.join( str(x) + '\n' for x in cognitiveModel.calculate_eigenvalues()) results += ' \n ' results += 'Стійкість збурення: ' results += 'True' if cognitiveModel.check_perturbation_stability( ) else 'False' results += ' \n ' results += 'Стійкість значення: ' results += 'True' if cognitiveModel.check_numerical_stability( ) else 'False' results += ' \n ' results += ' \n ' results += 'Структурна стійкість: ' cycles = cognitiveModel.check_structural_stability() if not cycles: results += 'True' else: cycle_str = lambda x: ' - '.join( self.main_table.verticalHeaderItem(y).text() for y in x) results += 'No \n(' + ', \n'.join(cycle_str(x) for x in cycles) + ')' self.result.setText(results)
def package(self): # 清空上次打包完成后的进度条显示列表 count = self.qpb_list_widget.count() if count > 0: for i in range(count): item = self.qpb_list_widget.takeItem(0) del item if len(self.selected) <= 0: QMessageBox.warning(self, "警告", "请选择需要打包的渠道!") return for package in self.selected: # {"success": 是否成功, "label": 进度条文本view, "qpb": 进度条view, "runnable": 打包任务} lbp = {'success': False} self.set_qpb_list_item(package['channel']['channelId'], lbp) runnable = PackRunnable(package['game'], package['channel'], package['game']['apk']) runnable.signal.signal.connect(self.set_value) self.monitor.add_runnable(runnable) lbp['runnable'] = runnable self.lbps[package['channel']['channelId']] = lbp # 开启监听线程 self.monitor.start() # 开始打包,不可返回,返回按钮禁用;设置打包按钮文本为"取 消" self.back_btn.setDisabled(True) self.pack_btn.setText("取 消")
def HandlingCondtion(self): if len(self.lineEditSelected.text()) <= 0: QMessageBox.warning(self, "خطأ", "يجب أن تحدد ملف أو مجلد") return False if len(self.lineEditPassword.text()) <= 5: QMessageBox.warning( self, "خطأ", "يجب أن تكون كلمة السر أكبر من 5 أحرف أو أرقام") return False if len(self.lineEditPassword.text()) > 16: QMessageBox.warning(self, "خطأ", "يجب أن تكون كلمة السر أقل من 16 حرف أو رقم") return False if self.lineEditPassword.text() != self.lineEditConfPassword.text(): QMessageBox.warning( self, "خطأ", "يجب أن يكون كلمتا السر في الخانتين متساويتين") return False if not os.path.exists(self.lineEditSelected.text()): QMessageBox.warning(self, "خطأ", "هذا المجلد أو هذا الملف غير موجود") return False return True
def on_treeview_doubleClick(self): ''' treeview selection double click event ''' if self.__tb_treeview.currentItem(): hititem = self.__tb_treeview.currentItem() if hititem.text(1) == 'root': return if hititem.text(0) in self.__opened_tables: return columns = [] column_types = [] records = [] try: # load the datatable record columns, column_types, records = self.__database_driver.get_records(self.__db_comboBox.currentText(), hititem.text(0)) except Exception as e: QMessageBox.warning(self, 'Warning', "Table load failed, please retry.", QMessageBox.Ok) print('expect:', e) return # record the selected table self.__opened_tables.append(hititem.text(0)) # render grid self.render_table_grid(hititem.text(0), columns, column_types, records)
def on_pushButton_next_clicked(self): """ Slot documentation goes here. """ # TODO: not implemented yet try: self.freq_sg = float(self.lineEdit_freq_sg.text()) * 1e6 self.power_sg = float(self.lineEdit_power_sg.text()) self.freq_sa = float(self.lineEdit_freq_sa.text()) * 1e6 self.bw_sa = float(self.lineEdit_bw_sa.text()) * 1e6 addr_sg = str(self.lineEdit_addr_sg.text()) addr_sa = str(self.lineEdit_addr_sa.text()) except: QMessageBox.warning(self, "警告", "测试参数输入不完整或格式不正确!") return addr_sg = "TCPIP0::" + addr_sg + "::inst0::INSTR" addr_sa = "TCPIP0::" + addr_sa + "::inst0::INSTR" self.test_result = test_results() if not self.demo: try: self.sa = AgilentN5242.VNA_AgilentN5242(addr_sa) self.sg = AgilentN5242.VNA_AgilentN5242(addr_sg) except: QMessageBox.warning(self, "警告", "仪表连接错误!") print('仪表连接错误,请确认!') return self.test_result.test_item = '收发单元发射通道' self.test_result.test_condition = '频率:' + self.lineEdit_freq_sg.text( ) + 'MHz,功率:' + self.lineEdit_power_sg.text() + 'dBm' self.test_result.test_results = 1 + np.random.random(1) self.test_result.test_conclusion = 'PASS' self._signalTest.emit("test") self.accept() self.close()
def package(self): # 清空上次打包完成后的进度条显示列表 count = self.qpb_list_widget.count() if count > 0: for i in range(count): item = self.qpb_list_widget.takeItem(0) del item self.indexs = [] for i in range(len(self.channels)): if self.check_boxs[i].isChecked(): self.indexs.append(i) if len(self.indexs) <= 0: QMessageBox.warning(self, "警告", "请选择需要打包的渠道!") return if self.apk_path.text().strip() == "": QMessageBox.warning(self, "警告", "请上传母包!") return apk = self.apk_path.text().strip().replace('\\', '/') for i in self.indexs: lbp = {} lbp['success'] = False self.set_qpb_list_item(self.channels[i], lbp) runnable = PackRunnable(self.game, self.channels[i], apk) runnable.signal.signal.connect(self.set_value) self.monitor.add_runnable(runnable) lbp['runnable'] = runnable self.lbps[self.channels[i]['channelId']] = lbp # 开启监听线程 self.monitor.start() # 开始打包,不可返回,返回按钮禁用;设置打包按钮文本为"取 消" self.back_btn.setDisabled(True) self.pack_btn.setText("取 消")
def importGraph(self, text): '''Init text after an import. Argument(s): text (str): Textual representation of the graph ''' self.acceptUpdate = False self.setPlainText(text) pydotGraph = graph_from_dot_data(text) # Check that attributes are in valid form message = self.checkItemsAttributes(pydotGraph.get_nodes(), pydotGraph.get_edges()) if not message: self.rebuildTextModel(text, pydotGraph) # Send every elements to the model to build him for id, args in self.nodes.items(): self.controller.onCreateNode(id, args) for id, args in self.edges.items(): self.controller.onCreateEdge(args[EdgeArgs.sourceId], args[EdgeArgs.destId]) # Some attributes are in invalid form else: QMessageBox.warning(self, "Syntax error", message) self.acceptUpdate = True
def openFile(self): fname = QFileDialog.getOpenFileName( self, '打开文件', ".", "All Files (*);;Vrc Files (*.vrc);;Text Files (*.txt);;Lrc Files (*.lrc);;Srt Files (*.srt);;Ass Files (*.ass)" ) if fname[0]: decoded = False for enc in ['utf-8-sig', 'utf-8', 'utf-16-le', 'gbk']: try: with open(fname[0], 'r', encoding=enc) as f: data = f.read() decoded = True break except OSError: QMessageBox.warning(self, '提示', '导入失败, 发生错误', QMessageBox.Cancel) return False, None except UnicodeDecodeError: pass if not decoded: QMessageBox.warning(self, '提示', '编码格式不支持', QMessageBox.Cancel) return False, None else: return True, data else: return False, None
def on_pushButton_next_clicked(self): """ Slot documentation goes here. """ # TODO: not implemented yet self.test_result=test_results() addr_sa=str(self.maddress) addr_sa = "TCPIP0::" + addr_sa + "::inst0::INSTR" if not self.demo: try: self.sa=SpectrumAnalyzer.SpectrumAnalyzer(addr_sa) except: QMessageBox.warning(self,ModuleConstants.QMESSAGEBOX_WARN, ModuleConstants.QMESSAGEBOX_WARN_INSTR_NOT_VALID) return self.test_result.test_item = ModuleConstants.TESTITEM_TR_LO self.test_result.test_condition = '--' self.test_result.test_results=str(self.testProcess()) if self.test_result.test_results ==self.threshold: QMessageBox.information(self,ModuleConstants.QMESSAGEBOX_INFO,ModuleConstants.QMESSAGEBOX_CONTENTS_TEST_NORMAL,QMessageBox.Ok) self.test_result.test_conclusion=ModuleConstants.TESTRESULT_PASS else: QMessageBox.information(self,ModuleConstants.QMESSAGEBOX_INFO,ModuleConstants.TESTITEM_TR_LO+ ModuleConstants.QMESSAGEBOX_CONTENTS_TEST_ABNORMAL,QMessageBox.Ok) self.test_result.test_conclusion=ModuleConstants.TESTRESULT_FAIL self._signalTest.emit("test_lo") self.accept() self.close()
def _fileSelected(self, filename, quiet=False): self.wokbtn.setEnabled(False) if not filename: return None # check that filename matches model if not os.path.samefile(self._model_dir, os.path.dirname(filename)): self.wfile.setFilename('') if not quiet: QMessageBox.warning( self, "Directory mismatch", """<P>The FITS file must reside in the same directory as the current sky model.</P>""") self.wfile.setDirectory(self._model_dir) return None # if filename is not in model already, enable the "add to model" control for src in self.model.sources: if isinstance(getattr(src, 'shape', None), ModelClasses.FITSImage): if os.path.exists(src.shape.filename) and os.path.samefile( src.shape.filename, filename): if not quiet: QMessageBox.warning( self, "Already in model", "This FITS brick is already present in the model.") self.wfile.setFilename('') return None if not str(self.wname.text()): self.wname.setText( os.path.splitext(os.path.basename(str(filename)))[0]) self.wokbtn.setEnabled(True) return filename
def changeLabel(self, shape, change_item): if change_item not in list(self.labelInfoDict.keys()): QMessageBox.warning(self, 'check label', 'modified label not in Labels list') else: shape.label = change_item self.setDirty()
def get_servo_addr_32(self, event): try: addr = self.lnt_servo_addr.text().strip() try: if addr.lower().startswith('0x'): addr = int(addr, base=16) else: addr = int(addr) except: QMessageBox.warning(self.main_ui.window, '错误', '请输入正确的地址, 地址必须是u16类型') return text = self.combobox_servo.currentText() if text == 'axis-all': QMessageBox.warning(self.main_ui.window, '警告', '请选择其中一个电机,不能选择所有电机') return else: servo_id = int(text.split('-')[-1]) tmp = '你确定要获取电机{}的地址{}的值吗?'.format(servo_id, addr) if QMessageBox.question(self.main_ui.window, '警告', tmp) == QMessageBox.Yes: item = { 'cmd': 'get_servo_addr_32', 'kwargs': { 'servo_id': servo_id, 'addr': addr } } self.handler.put_cmd_que(item) except Exception as e: print(e)
def importGraph(self, text): '''Init text after an import. Argument(s): text (str): Textual representation of the graph ''' self.acceptUpdate = False self.setPlainText(text) pydotGraph = graph_from_dot_data(text) # Check that attributes are in valid form message = self.checkItemsAttributes(pydotGraph.get_nodes(), pydotGraph.get_edges()) if not message: self.rebuildTextModel(text, pydotGraph) # Send every elements to the model to build him for id, args in self.nodes.items(): self.controller.onCreateNode(id, args) for id, args in self.edges.items(): self.controller.onCreateEdge(args[EdgeArgs.sourceId], args[EdgeArgs.destId]) # Some attributes are in invalid form else: QMessageBox.warning(self, "Syntax error", message) self.acceptUpdate = True
def save_data(self): if self.game_name_value.text().strip() == "": QMessageBox.warning(self, "警告", "游戏名称不能为空!") return False if self.keystore_path.text().strip() == "": QMessageBox.warning(self, "警告", "必须上传keystore签名文件!") return False if self.keystore_pwd_value.text().strip() == "": QMessageBox.warning(self, "警告", "keystore密码不能为空!") return False if self.keystore_alias_value.text().strip() == "": QMessageBox.warning(self, "警告", "alias不能为空!") return False if self.keystore_aliaspwd_value.text().strip() == "": QMessageBox.warning(self, "警告", "alias密码不能为空!") return False self.game['name'] = self.game_name_value.text().strip() self.game['desc'] = self.game_desc_value.toPlainText().strip() if self.keystore_exchanged: keystore = os.path.basename(self.keystore_path.text().strip()) self.game['keystore'] = keystore self.game['keypwd'] = self.keystore_pwd_value.text().strip() self.game['alias'] = self.keystore_alias_value.text().strip() self.game['aliaspwd'] = self.keystore_aliaspwd_value.text().strip() keystore_path = Utils.get_full_path('games/' + self.game['id'] + '/keystore/' + keystore) if not os.path.exists(keystore_path): Utils.copy_file(self.keystore_path.text().strip(), keystore_path) self.main_win.games[self.main_win.game_index] = self.game self.game_list_model.update_item(self.main_win.game_index, self.game) return Utils.update_games(Utils.get_full_path('games/games.xml'), self.game, self.main_win.game_index)
def graph1(self): A = self.get_A() if A.any() == None: QMessageBox.warning(w, 'Error', 'Помилка обробки матриці') return cognitiveModel = CognitiveModel(A) cognitiveModel.draw_graph()
def impulse1(self): A = self.get_A() if A.any() == None: QMessageBox.warning(w, 'Error', 'Error parsing matrix') cognitiveModel = CognitiveModel(A) B = self.get_B() t = 7 cognitiveModel.impulse_model(t=t, q=B)
def merge_images_labels_to_one_dir(dir_path): if not is_images_path_exist(dir_path) or not is_labels_path_exist(dir_path): QMessageBox.warning(None, 'warning', 'No images or labels exist') images_path = os.path.join(dir_path, DIR_IMAGES) labels_path = os.path.join(dir_path, DIR_LABELS) move_files(images_path, dir_path) move_files(labels_path, dir_path) os.rmdir(images_path) os.rmdir(labels_path)
def select_list(self): index = self.qpb_list_widget.currentIndex().row() channel_id = self.channels[self.indexs[index]]['channelId'] success = self.lbps[channel_id]['success'] dest_apk_dir = Utils.get_full_path('output/' + self.game['id'] + '/' + channel_id) if success: os.startfile(dest_apk_dir) else: QMessageBox.warning(self, "警告", "打包成功了吗?")
def npkYesFunc(): if not self.mainWin.npkDict: QMessageBox.warning(self, "未设置NPK词典", "未设置NPK词典将不能设置NPK提取", QMessageBox.Yes, QMessageBox.Yes) npkNo.setChecked(True) return False if not self.mainWin.img2Dir: QMessageBox.warning(self, "未设置img2目录", "未设置img2目录将不能设置NPK提取", QMessageBox.Yes, QMessageBox.Yes) npkNo.setChecked(True) return False
def add_icon(self): fname = QFileDialog.getOpenFileName( self, '选择icon', os.path.join(os.path.expanduser('~'), "Desktop"), ("Images (*.png)")) if fname[0]: pix = QPixmap(fname[0]) if pix.width() != 512 or pix.height() != 512: QMessageBox.warning(self, "警告", "必须上传512*512.png图片") return self.icon_img.setPixmap(pix) self.icon_path = fname[0]
def remove1(self): selected_items = self.main_table.selectedItems() try: k = selected_items[0] c = k.column() self.main_table.removeColumn(c) self.main_table.removeRow(c) #self.impulse_table.removeColumn(c) except: QMessageBox.warning(w, 'Error', 'Нема виділених даних')
def on_pushButton_next_clicked(self): """ Slot documentation goes here. """ # TODO: not implemented yet try: self.freq_sg = float(self.lineEdit_freq_sg.text()) * 1e6 self.power_sg = float(self.lineEdit_power_sg.text()) self.freq_sa = float(self.lineEdit_freq_sa.text()) * 1e6 self.bw_sa = float(self.lineEdit_bw_sa.text()) * 1e6 addr_sg = str(self.addr_sg) addr_sa = str(self.addr_sa) except: QMessageBox.warning( self, ModuleConstants.QMESSAGEBOX_WARN, ModuleConstants.QMESSAGEBOX_WARN_INPUT_PARAMETER_NOT_ENOUGH) return addr_sg = "TCPIP0::" + addr_sg + "::inst0::INSTR" addr_sa = "TCPIP0::" + addr_sa + "::inst0::INSTR" self.test_result = test_results() if not self.demo: try: self.sa = SpectrumAnalyzer.SpectrumAnalyzer(addr_sa) self.sg = SignalGenerator.SignalGenerator(addr_sg) except: QMessageBox.warning( self, ModuleConstants.QMESSAGEBOX_WARN, ModuleConstants.QMESSAGEBOX_WARN_INSTR_NOT_VALID) return self.test_result.test_item = ModuleConstants.TESTITEM_TR_R self.test_result.test_condition = ModuleConstants.TESTCONDITION_FREQ+self.lineEdit_freq_sg.text()+\ ModuleConstants.TESTCONDITION_FREQ_UNIT+','+ModuleConstants.TESTCONDITION_POWER+\ self.lineEdit_power_sg.text()+ModuleConstants.TESTCONDITION_POWER_UNIT self.test_result.test_results = self.testProcess() if self.thresholdL < self.test_result.test_results < self.thresholdH: QMessageBox.information( self, ModuleConstants.QMESSAGEBOX_INFO, ModuleConstants.QMESSAGEBOX_CONTENTS_TEST_NORMAL, QMessageBox.Ok) self.test_result.test_conclusion = ModuleConstants.TESTRESULT_PASS else: QMessageBox.information( self, ModuleConstants.QMESSAGEBOX_INFO, ModuleConstants.TESTITEM_TR_R + ModuleConstants.QMESSAGEBOX_CONTENTS_TEST_ABNORMAL, QMessageBox.Ok) self.test_result.test_conclusion = ModuleConstants.TESTRESULT_FAIL if not self.demo: self.sa.Preset() self.sg.Preset() self._signalTest.emit("test") self.accept() self.close()
def on_pushButton_next_clicked(self): """ Slot documentation goes here. """ # TODO: not implemented yet try: self.freq_na = float(self.lineEdit_freq_na.text()) * 1e6 self.bw_na = float(self.lineEdit_bw_na.text()) * 1e6 addr_na = str(self.addr_na) except: QMessageBox.warning( self, ModuleConstants.QMESSAGEBOX_WARN, ModuleConstants.QMESSAGEBOX_WARN_INPUT_PARAMETER_NOT_ENOUGH) return addr_na = "TCPIP0::" + addr_na + "::inst0::INSTR" self.test_result = test_results() if not self.demo: try: self.na = AgilentN5242.VNA_AgilentN5242(addr_na) except: QMessageBox.warning( self, ModuleConstants.QMESSAGEBOX_WARN, ModuleConstants.QMESSAGEBOX_WARN_INSTR_NOT_VALID) return self.test_result.test_item = ModuleConstants.TESTITEM_FILTER self.test_result.test_condition = ModuleConstants.TESTCONDITION_FREQ+self.lineEdit_freq_na.text()+\ ModuleConstants.TESTCONDITION_FREQ_UNIT+','+ModuleConstants.TESTCONDITION_BAND+\ self.lineEdit_bw_na.text()+ModuleConstants.TESTCONDITION_BAND_UNIT mTemp = self.testProcess() self.test_result.test_results = 'S11: ' + str( mTemp[0]) + ' S21: ' + str(mTemp[1]) if self.thresholdL_1 < mTemp[ 0] < self.thresholdH_1 and self.thresholdL_2 < mTemp[ 1] < self.thresholdH_2: QMessageBox.information( self, ModuleConstants.QMESSAGEBOX_INFO, ModuleConstants.QMESSAGEBOX_CONTENTS_TEST_NORMAL, QMessageBox.Ok) self.test_result.test_conclusion = ModuleConstants.TESTRESULT_PASS else: QMessageBox.information( self, ModuleConstants.QMESSAGEBOX_INFO, ModuleConstants.TESTITEM_FILTER + ModuleConstants.QMESSAGEBOX_CONTENTS_TEST_ABNORMAL, QMessageBox.Ok) self.test_result.test_conclusion = ModuleConstants.TESTRESULT_FAIL self._signalTest.emit("test") self.accept() self.close()
def buttonExportClicked(self): (filePaths, filter) = QFileDialog.getOpenFileNames( parent=self, caption="转换数据库文件为文本格式", directory=QApplication.applicationDirPath() + "/../data", filter="Database file (*.db * mdb)", ) if not filePaths: return # if DatabaseMgr().convertToText(filePaths): QMessageBox.information(self, "格式转换", "转换成功!") else: QMessageBox.warning(self, "格式转换", "转换失败!")
def exchange_icon(self): fname = QFileDialog.getOpenFileName( self, '选择icon', Utils.get_full_path('games/' + self.game['id'] + '/icon/'), ("Images (*.png)")) if fname[0]: pix = QPixmap(fname[0]) if pix.width() != 512 or pix.height() != 512: QMessageBox.warning(self, "警告", "必须上传512*512.png图片") return self.icon_img.setPixmap(pix) current_icon = Utils.get_full_path('games/' + self.game['id'] + '/icon/icon.png') if os.path.exists(current_icon): if os.path.samefile(os.path.dirname(fname[0]), os.path.dirname(current_icon)): if not os.path.samefile( fname[0], current_icon ): # 如果选中的,在game的icon目录下,但不是当前icon,则进行重命名 count = 0 temp = 'icon0.png' while os.path.exists( Utils.get_full_path('games/' + self.game['id'] + '/icon/' + temp)): count += 1 temp = 'icon' + str(count) + '.png' os.renames( current_icon, Utils.get_full_path('games/' + self.game['id'] + '/icon/' + temp)) os.renames(fname[0], current_icon) else: # 如果所选的是当前icon,不做处理 return else: # 如果选中的不在game的icon目录下,则重命名当前icon,并将选中的icon复制到目录下作为当前icon count = 0 temp = 'icon0.png' while os.path.exists( Utils.get_full_path('games/' + self.game['id'] + '/icon/' + temp)): count += 1 temp = 'icon' + str(count) + '.png' os.renames( current_icon, Utils.get_full_path('games/' + self.game['id'] + '/icon/' + temp)) Utils.copy_file(fname[0], current_icon) else: Utils.copy_file(fname[0], current_icon)
def startfusion(self): fps = self.ui.fps.text() picpath = self.ui.picpath.text() output = self.ui.outputpath.text() savename = self.ui.savename.text() if (fps != '') & (picpath != '') & (output != '') & (savename != ''): self.fusion_video(picpath=picpath, output=output, savename=savename, fps=fps) else: QMessageBox.warning(self, 'Warning!', 'Make sure all the message correctly!', QMessageBox.Yes | QMessageBox.No, QMessageBox.Yes)
def select_channel(self): if 'apk' not in self.main_win.games[self.game_index]: QMessageBox.warning(self, "警告", "请先添加母包!") return channel = self.channels[self.clv.currentIndex().row()] name = self.main_win.games[ self.game_index]['id'] + '-' + channel['channelId'] if name in self.selected_name: return self.selected_name.append(name) self.cslv_model.setStringList(self.selected_name) package = { 'game': self.main_win.games[self.game_index], 'channel': channel } self.selected.append(package)
def load_zone_shape_fields(self, fields): """ @summary: Loads zone shape fields combo @param fields: Zone shape fields @type fields: List object """ if fields is None: QMessageBox.warning(None, "Zone Shape Fields", "There are no fields to load.") print("There are no fields to load.") else: self.zones_shape_fields.setEnabled(True) self.zones_shape_fields.clear() self.zones_shape_fields.addItems(fields) print("")
def _fileSelected(self, filename, quiet=False): self.wokbtn.setEnabled(False) if not filename: return None # check that filename matches model if not os.path.samefile(self._model_dir, os.path.dirname(filename)): self.wfile.setFilename('') if not quiet: QMessageBox.warning( self, "Directory mismatch", """<P>The FITS file must reside in the same directory as the current sky model.</P>""") self.wfile.setDirectory(self._model_dir) return None # read fits file busy = BusyIndicator() try: input_hdu = pyfits.open(filename)[0] hdr = input_hdu.header # get frequency, if specified for axis in range(1, hdr['NAXIS'] + 1): if hdr['CTYPE%d' % axis].upper() == 'FREQ': self.wfreq.setText(str(hdr['CRVAL%d' % axis] / 1e+6)) break except Exception as err: busy.reset_cursor() self.wfile.setFilename('') if not quiet: QMessageBox.warning( self, "Error reading FITS", "Error reading FITS file %s: %s" % (filename, str(err))) return None self.wokbtn.setEnabled(True) # if filename is not in model already, enable the "add to model" control for src in self.model.sources: if isinstance(getattr(src, 'shape', None), ModelClasses.FITSImage) \ and os.path.exists(src.shape.filename) and os.path.exists(filename) \ and os.path.samefile(src.shape.filename, filename): self.wadd.setChecked(True) self.wadd.setEnabled(False) self.wadd.setText("image already in sky model") break else: self.wadd.setText("add image to sky model") busy.reset_cursor() return filename
def on_clicked_action_open(self): filename = QFileDialog.getOpenFileName(self, 'Open .obj model file', r'../3d_object', '*.obj')[0] if not filename: return stat = self.renderer.open_obj_file(filename) if stat == Renderer.OPEN_FILE_SUCCESS: self.update_shader() return msg = "Failed opening '%s'. " % filename if stat == Renderer.OPEN_FILE_NOT_EXIST: msg += 'File do not exist.' if stat == Renderer.OPEN_FILE_IO_ERROR: msg += 'File io error.' if stat == Renderer.OPEN_FILE_SYNTAX_NOT_SUPPORT: msg += 'File syntax not support.' QMessageBox.warning(self, 'Failed Opening', msg)
def startPresentationFromFile(self): """ Logic of what happens if Start From File (F6) is pressed. Checks if a the instance has a valid stimulus file loaded already. If so the stimulus file (.csv) is read and the experiment is started according to it. """ if hasattr(self, 'stimulusFilename'): if self.stimulusFilename is None: QMessageBox.warning( None, 'Could not start the stimulus presentation.', 'No file has been loaded.') return else: QMessageBox.warning(None, 'Could not start the stimulus presentation.', 'No file has been loaded.') return self.showWidgets() with open(self.stimulusFilename, mode='r', newline='') as csv_file: csv_reader = csv.reader(csv_file, delimiter=',') # Identify the type of experiment from csv file firstrow = next(csv_reader) if len(firstrow) > 3: self.experimenttype = 'ERP' self.artifact_types = firstrow[3:] else: self.experimenttype = 'Artifact' self.stimuliList = [] while True: try: row = csv_reader.__next__() self.stimuliList.append({ firstrow[0]: row[0], firstrow[1]: row[1], firstrow[2]: row[2] }) except StopIteration: break if self.experimenttype == 'Artifact': self.artifact_types = [row['type'] for row in self.stimuliList] self.startPresentation()
def upload1(self): try: df = pd.read_csv(self.file.displayText(), delimiter=',', header=None) self.main_table.clear() self.main_table.setCornerButtonEnabled(False) #self.impulse_table.setCornerButtonEnabled(False) self.main_table.setColumnCount(len(df)) #self.impulse_table.setColumnCount(len(df)) self.main_table.setRowCount(len(df)) #self.impulse_table.setRowCount(1) self.main_table.setSortingEnabled(False) for i in range(len(df)): #self.main_table.horizontalHeader.setDefaultSectionSize(60) item = QTableWidgetItem() self.main_table.setVerticalHeaderItem(i, item) item = self.main_table.verticalHeaderItem(i) item.setText(str(i + 1)) self.main_table.setColumnWidth(i, 50) item = QTableWidgetItem() self.main_table.setHorizontalHeaderItem(i, item) item = self.main_table.horizontalHeaderItem(i) item.setText(str(i + 1)) for i in range(len(df)): for j in range(len(df)): item = QTableWidgetItem() mmm = round(df.iloc[i, j], 3) item.setText(str(mmm)) self.main_table.setItem(i, j, item) self.main_table.setColumnWidth(i, 50) self.main_table.setRowHeight(i, 50) #item = QTableWidgetItem() #item.setText(str(0)) #self.impulse_table.setItem(0, i, item) #self.main_table.resizeRowsToContents() except: QMessageBox.warning(w, 'Error', 'Не вибраний існуючий файл')
def maybeSave(self): if not self.textPane.document().isModified(): return True ret = QMessageBox.warning(self, 'GuiScannos', 'The document has been modified.\n' 'Do you want to save your changes?', QMessageBox.Save | QMessageBox.Discard | QMessageBox.Cancel) if ret == QMessageBox.Save: return self.fileSave() if ret == QMessageBox.Cancel: return False return True
def _investigator_clicked(self, checked): grade = self.ui.gradeEdit.text() if (checked and grade < 13) or \ (not checked and grade > 12): msg = 'Investigator with grade %d?' % (grade,) QMessageBox.warning(QMessageBox(), 'Input Warning', msg)
def onButtonQuitClicked(self): if QMessageBox.warning(self, '警告', '你确定要退出软件吗?', QMessageBox.Ok | QMessageBox.No) == QMessageBox.Ok: self.close()
def focusOutEvent(self, event): '''Handle focus out event. Argument(s): event (QFocusEvent): Focus event ''' self.acceptUpdate = False # Create pydot graph from text pydotGraph = graph_from_dot_data(self.toPlainText()) # If the pydot graph is valid we can rewrite the text and check changes if pydotGraph: # If attributes are in valid form message = self.checkItemsAttributes(pydotGraph.get_nodes(), pydotGraph.get_edges()) if not message: oldNodes = self.nodes oldEdges = self.edges self.nodes = {} self.edges = {} self.rebuildTextModel(self.toPlainText(), pydotGraph) # Compare old and new text and send changes to the model # Add nodes added added = self.nodes.keys() - oldNodes.keys() for idNode in added: self.controller.onCreateNode(idNode, self.nodes[idNode]) # Edit nodes changed intersect = set(self.nodes.keys()).intersection( set(oldNodes.keys())) for idNode in intersect: if self.nodes[idNode] != oldNodes[idNode]: self.controller.onEditNode(idNode, self.nodes[idNode]) # Remove nodes deleted removed = oldNodes.keys() - self.nodes.keys() for idNode in removed: self.controller.onRemoveNode(idNode) # Delete edges which contain the node edgeToRemove = [] for edge in self.edges: if (idNode == self.edges[edge][EdgeArgs.sourceId] or idNode == self.edges[edge][EdgeArgs.destId]): edgeToRemove.append(edge) self.acceptUpdate = True for edge in edgeToRemove: self.removeEdge({ EdgeArgs.id: edge, EdgeArgs.sourceId: self.edges[edge][EdgeArgs.sourceId], EdgeArgs.destId: self.edges[edge][EdgeArgs.destId] }) self.acceptUpdate = False # Remove edges deleted removed = oldEdges.keys() - self.edges.keys() for idEdge in removed: self.controller.onRemoveEdge( oldEdges[idEdge][EdgeArgs.sourceId], oldEdges[idEdge][EdgeArgs.destId]) # Add edges added added = self.edges.keys() - oldEdges.keys() for idEdge in added: nodeSource = self.edges[idEdge][EdgeArgs.sourceId] nodeDest = self.edges[idEdge][EdgeArgs.destId] self.controller.onCreateEdge(nodeSource, nodeDest) QTextEdit.focusOutEvent(self, event) # Some attributes are in invalid form: show an error window else: QMessageBox.warning(self, "Syntax error", message) self.setFocus() # Pydot graph invalid: show an error window else: QMessageBox.warning(self, "Syntax error", "The dot structure is invalid.") self.setFocus() self.acceptUpdate = True