def _handle_load_clicked(self): # path = QFileDialog.getOpenFileName(self, self.tr('Load from File'), '.', self.tr('Bag files {.bag} (*.bag)')) # path = str(QFileDialog.getExistingDirectory(self, "Select Directory")) import inspect filepath = os.path.dirname( os.path.abspath(inspect.getfile( inspect.currentframe()))) + "/log/select_bag.log" current_directory = self.get_current_opened_directory(filepath) fd = QFileDialog(self) wc = "Bag files {.bag} (*.bag)" path, filter = fd.getOpenFileNamesAndFilter( filter=wc, initialFilter=('*.bag'), directory=current_directory) # print path if len(path) != 0: with open(filepath, "w") as f: f.write(path[0]) # if path[0][-4:] == ".bag": # file # print "True" # self.load_bag(path[0]) # files = [path[0]] # else: #dir # print "Else " + path # path = path + "/" # files = self.get_bag_files(path) # print files # # # files = self.get_bag_files("/home/lab/bagfiles/") if path: self.get_features_from_bags(path)
def onButtonClicked(self): import inspect, os filepath = os.path.dirname( os.path.abspath(inspect.getfile( inspect.currentframe()))) + "/log/select_history.log" fd = QFileDialog(self) wc = "Csv files {.csv} (*.csv)" self.files = [] current_directory = self.get_current_opened_directory(filepath) tmp_pathes, filter = fd.getOpenFileNamesAndFilter( filter=wc, initialFilter=('*.csv'), directory=current_directory) for path in tmp_pathes: self.files.append(path.encode("utf-8")) # print self.files if len(self.files) != 0: self.get_min_rows_csv(tmp_pathes) self.select_path.setText(self.files[0]) with open(filepath, "w") as f: f.write(self.files[0]) # handler = logging.FileHandler(filepath, mode='w') # logger_topic.addHandler(handler) # logger_topic.info(self.files[0]) else: self.select_path.setText("")
def load_FTS(self): # Start file dialog directory = os.path.join(rospkg.RosPack().get_path('rqt_simulation'), 'config', 'FTS') File_dialog = QFileDialog(directory=directory, filter='.yaml') FTS_file = File_dialog.getOpenFileName() stream = file(FTS_file[0], 'r') data = yaml.load(stream) stream.close() # Load FTS self.region_of_interest = {} self.region_of_interest = data['FTS']
def _handle_save(self): """Callback for when the save button is pressed.""" result = QFileDialog.getSaveFileName(self, "Save File", ".", "Minute files (*.txt)") file_name = result[0] if file_name: self._save(file_name)
def _load_bag(self, file_name=None): self._topic_list = [] if file_name is None: file_name, _ = QFileDialog.getOpenFileName( self._widget, self.tr('Open bag file'), None, self.tr('ROSbag file (*.bag)')) if file_name is None or file_name == '': return try: self._bag_filename = file_name bag = rosbag.Bag(file_name) topics = bag.get_type_and_topic_info()[1].keys() types = [] for i in range(0, len(bag.get_type_and_topic_info()[1].values())): types.append( list(bag.get_type_and_topic_info()[1].values())[i][0]) for topic_name, topic_type in zip(topics, types): topic_item = self._recursive_create_widget_items( self._widget.topics_tree_widget, topic_name, topic_type, roslib.message.get_message_class(topic_type), False) self._widget.topics_tree_widget.header().setSectionResizeMode( QHeaderView.ResizeToContents) self._widget.topics_tree_widget.header().setStretchLastSection( True) except IOError: return
def onPlpClicked(self): import inspect, os filepath = os.path.dirname( os.path.abspath(inspect.getfile( inspect.currentframe()))) + "/log/save_plp.log" current_directory = self.get_current_opened_directory(filepath) fd = QFileDialog(self) wc = "Csv files {.py} (*.py)" # print current_directory filename, filter = fd.getOpenFileNamesAndFilter( filter=wc, initialFilter=('*.py'), directory=current_directory) if len(filename): self.plp_filename = filename[0] with open(filepath, "w") as f: f.write(self.plp_filename) self.select_path.setText(self.plp_filename)
def _handle_save_clicked(self, checked): filename = QFileDialog.getSaveFileName( self, 'Save to File', '.', self.tr('rqt_console msg file {.csv} (*.csv)')) if filename[0] != '': filename = filename[0] if filename[-4:] != '.csv': filename += '.csv' try: handle = open(filename, 'w') except IOError as e: qWarning(str(e)) return try: handle.write(';'.join(MessageDataModel.columns) + '\n') for index in range(self._proxy_model.rowCount()): row = self._proxy_model.mapToSource(self._proxy_model.index(index, 0)).row() msg = self._model._messages[row] data = {} data['message'] = msg.message.replace('"', '\\"') data['severity'] = str(msg.severity) data['node'] = msg.node data['stamp'] = str(msg.stamp[0]) + '.' + str(msg.stamp[1]).zfill(9) data['topics'] = ','.join(msg.topics) data['location'] = msg.location line = [] for column in MessageDataModel.columns: line.append('"%s"' % data[column]) handle.write(';'.join(line) + '\n') except Exception as e: qWarning('File save failed: %s' % str(e)) return False finally: handle.close() return True
def handle_select(self): # TODO(lucasw) have a parameter define which kind of dialog to use file_dir = self.current_line_edit.text() new_file_dir = None if self.mode == "file_save": new_file_dir, tmp = QFileDialog.getSaveFileName(caption="Select a save file", directory=os.path.dirname(file_dir)) elif self.mode == "file_open": new_file_dir, tmp = QFileDialog.getOpenFileName(caption="Select a file", directory=os.path.dirname(file_dir)) else: # elif mode == "dir": new_file_dir = QFileDialog.getExistingDirectory(caption="Select a directory", directory=os.path.dirname(file_dir)) if new_file_dir is not None and new_file_dir != "": self.current_line_edit.setText(new_file_dir) self.publish()
def _load_dot(self, file_name=None): if file_name is None: file_name, _ = QFileDialog.getOpenFileName( self._widget, self.tr('Open graph from file'), None, self.tr('DOT graph (*.dot)')) if file_name is None or file_name == '': return try: fh = open(file_name, 'rb') dotcode = fh.read() fh.close() except IOError: return # disable controls customizing fetched ROS graph self._widget.graph_type_combo_box.setEnabled(False) self._widget.filter_line_edit.setEnabled(False) self._widget.topic_filter_line_edit.setEnabled(False) self._widget.namespace_cluster_spin_box.setEnabled(False) self._widget.actionlib_check_box.setEnabled(False) self._widget.dead_sinks_check_box.setEnabled(False) self._widget.leaf_topics_check_box.setEnabled(False) self._widget.quiet_check_box.setEnabled(False) self._widget.unreachable_check_box.setEnabled(False) self._widget.group_tf_check_box.setEnabled(False) self._widget.hide_tf_nodes_check_box.setEnabled(False) self._widget.group_image_check_box.setEnabled(False) self._widget.hide_dynamic_reconfigure_check_box.setEnabled(False) self._update_graph_view(dotcode)
def save_as(self): ''' Saves all currently recorded frames into a json file, which is saved at a user specified location ''' self.treeModeChanged(self._previousTreeMode) self._saveDir = QFileDialog.getExistingDirectory() self._recorder.save_animation(self._saveDir, self._widget.lineAnimationName.text(), self._checkBoxesSave)
def saveDatabaseAs(self, unused=None): self.databaseFilename = QFileDialog.getSaveFileName(self.widget, caption="Save track database", filter="*.tracks", directory=self.defaultDatabaseDirectory)[0] if self.databaseFilename: if not self.databaseFilename.endswith(".tracks"): self.databaseFilename += ".tracks" self._onDatabaseFilenameChanged() self.saveDatabase()
def open(self): ''' Deletes all current frames and instead loads an animation from a json file ''' if len(self._widget.frameList) > 1: message = "This will discard your current Animation. Continue?" sure = QMessageBox.question(self._widget, 'Sure?', message, QMessageBox.Yes | QMessageBox.No) if sure == QMessageBox.No: return my_file = QFileDialog.getOpenFileName()[0] if my_file: status = self._recorder.load_animation(my_file) if status == "": status = "Load successful." self._widget.statusBar.showMessage(status) animstate = self._recorder.get_animation_state() for i in animstate: try: self._checkBoxesPower[i['name']] = i['torque'] except KeyError: self._checkBoxesPower[i['name']] = {} for key in self.ids: self._checkBoxesPower[i['name']][key] = 2 self.update_frames() metadata = self._recorder.get_meta_data() self._widget.lineAnimationName.setText(metadata[0]) self._widget.lineAuthor.setText(metadata[2]) self._widget.lineVersion.setText(str(metadata[1])) self._widget.fieldDescription.setPlainText(metadata[3])
def _load_dot(self, file_name=None): if file_name is None: file_name, _ = QFileDialog.getOpenFileName(self._widget, self.tr('Open graph from file'), None, self.tr('DOT graph (*.dot)')) if file_name is None or file_name == '': return try: fh = open(file_name, 'rb') dotcode = fh.read() fh.close() except IOError: return # disable controls customizing fetched ROS graph self._widget.depth_combo_box.setEnabled(False) self._widget.directions_combo_box.setEnabled(False) self._widget.package_type_combo_box.setEnabled(False) self._widget.filter_line_edit.setEnabled(False) self._widget.with_stacks_check_box.setEnabled(False) self._widget.mark_check_box.setEnabled(False) self._widget.colorize_check_box.setEnabled(False) self._widget.hide_transitives_check_box.setEnabled(False) self._update_graph(dotcode) self._redraw_graph_scene()
def _handle_save_clicked(self, checked): filename = QFileDialog.getSaveFileName(self, 'Save to File', '.', self.tr('rqt_console msg file {.csv} (*.csv)')) if filename[0] != '': filename = filename[0] if filename[-4:] != '.csv': filename += '.csv' try: handle = open(filename, 'w') except IOError as e: qWarning(str(e)) return try: handle.write(';'.join(MessageDataModel.columns) + '\n') for index in range(self._proxy_model.rowCount()): row = self._proxy_model.mapToSource(self._proxy_model.index(index, 0)).row() msg = self._model._messages[row] data = {} data['message'] = msg.message.replace('"', '\\"') data['severity'] = str(msg.severity) data['node'] = msg.node data['stamp'] = str(msg.stamp[0]) + '.' + str(msg.stamp[1]).zfill(9) data['topics'] = ','.join(msg.topics) data['location'] = msg.location line = [] for column in MessageDataModel.columns: line.append('"%s"' % data[column]) handle.write(';'.join(line) + '\n') except Exception as e: qWarning('File save failed: %s' % str(e)) return False finally: handle.close() return True
def _load_dot(self, file_name=None): if file_name is None: file_name, _ = QFileDialog.getOpenFileName( self._widget, self.tr('Open graph from file'), None, self.tr('DOT graph (*.dot)')) if file_name is None or file_name == '': return try: fh = open(file_name, 'rb') dotcode = fh.read() fh.close() except IOError: return # disable controls customizing fetched ROS graph self._widget.depth_combo_box.setEnabled(False) self._widget.directions_combo_box.setEnabled(False) self._widget.package_type_combo_box.setEnabled(False) self._widget.filter_line_edit.setEnabled(False) self._widget.with_stacks_check_box.setEnabled(False) self._widget.mark_check_box.setEnabled(False) self._widget.colorize_check_box.setEnabled(False) self._widget.hide_transitives_check_box.setEnabled(False) self._widget.show_system_check_box.setEnabled(False) self._update_graph(dotcode) self._redraw_graph_scene()
def press_select_yaml(self): options = QFileDialog.Options() options |= QFileDialog.DontConfirmOverwrite select_yaml_caption = "Select YAML configuration file" select_yaml_directory = "" select_yaml_file_filter = "YAML Files (*.yaml);;All Files (*)" yaml_file, file_filter = QFileDialog.getSaveFileName( self._widget, caption=select_yaml_caption, directory=select_yaml_directory, filter=select_yaml_file_filter, options=options) # yaml_file, file_filter = QFileDialog.getOpenFileName(self._widget, caption=select_yaml_caption, directory=select_yaml_directory, filter=select_yaml_file_filter, options=options) rospy.loginfo('%s::%s: selected file %s' % (self._name, self.get_function_name(), yaml_file)) self.set_yaml(yaml_file)
def _handle_record_clicked(self): if self._recording: self._timeline.toggle_recording() return # TODO verify master is still running filename = QFileDialog.getSaveFileName( self, self.tr('Select prefix for new Bag File'), '.', self.tr('Bag files {.bag} (*.bag)')) if filename[0] != '': prefix = filename[0].strip() # Get filename to record to record_filename = time.strftime('%Y-%m-%d-%H-%M-%S.bag', time.localtime(time.time())) if prefix.endswith('.bag'): prefix = prefix[:-len('.bag')] if prefix: record_filename = '%s_%s' % (prefix, record_filename) rospy.loginfo('Recording to %s.' % record_filename) #TODO Implement recording of topic subsets, regex limiting and by number of messages per topic self.load_button.setEnabled(False) self._recording = True self._timeline.record_bag(record_filename)
def onSaveClicked(self): import inspect, os filepath = os.path.dirname( os.path.abspath(inspect.getfile( inspect.currentframe()))) + "/log/save_history.log" # print self.files # print self.window.text() # print self.group_selected_items.values() # print self.group_selected_items current_directory = self.get_current_opened_directory(filepath) # print current_directory # self._to_save_filename = QFileDialog.getSaveFileName(self, self.tr('csv File'), current_directory, # self.tr('csv (*.csv)')) self.saved_dir = str( QFileDialog.getExistingDirectory(self, "Select Directory", current_directory)) # if self._to_save_filename[0] != "": # with open(filepath, "w") as f: # f.write(self._to_save_filename[0]) if self.saved_dir != "": with open(filepath, "w") as f: f.write(self.saved_dir) # handler = logging.FileHandler(filepath, mode='w') # logger_topic.addHandler(handler) # print self._to_save_filename[0] # logger_topic.info() # self.save_path.setText(get_corrent_file_name(self._to_save_filename[0], ".csv")) self.save_path.setText(self.saved_dir)
def _on_record_settings_selected(self, all_topics, selected_topics, selected_scenario): # TODO verify master is still running import inspect filepath = os.path.dirname( os.path.abspath(inspect.getfile( inspect.currentframe()))) + "/log/save_record.log" current_directory = self.get_current_opened_directory(filepath) filename = QFileDialog.getSaveFileName( self, self.tr('Select prefix for new Bag File'), current_directory, self.tr('Bag files {.bag} (*.bag)')) if filename[0] != '': with open(filepath, "w") as f: f.write(filename[0]) record_filename = filename[0].strip() if not record_filename.endswith('.bag'): record_filename = record_filename + ".bag" # # Get filename to record to # record_filename = time.strftime('%Y-%m-%d-%H-%M-%S.bag', time.localtime(time.time())) # if prefix.endswith('.bag'): # prefix = prefix[:-len('.bag')] # if prefix: # record_filename = prefix rospy.loginfo('Recording to %s.' % record_filename) self.start_recording(record_filename, selected_scenario, selected_topics)
def button_save_as_pressed(self): (name,filt) = QFileDialog.getSaveFileName(caption='Save Movement',filter="YAML (*.yaml)") self.loaded_movement.filename = name if self.loaded_movement.filename: self.button_save_pressed() else: rospy.logerr("No filename specified")
def open_directory_dialogue(self): return QFileDialog.getExistingDirectory( None, "Select a directory to save gaits. Directory must be " "a subdirectory of march_gait_files or be named resources.", os.path.join(self.march_path, "ros2", "src", "gaits", "march_gait_files"), )
def btnClicked(self): ''' a slot which is called when the button is clicked ''' cwd = os.getcwd() # current working directory fileTupel = QFileDialog.getOpenFileName(self, 'Select file', cwd, "Bag files (*.bag)") self.fileName = fileTupel[0] self.bagEdit.setText(self.fileName) # print filename to lineEdit
def _handle_load_clicked(self): filename = QFileDialog.getOpenFileName( self, self.tr('Load from File'), '.', self.tr('Bag files {.bag} (*.bag)')) if filename[0] != '': self.filename = filename[0] self.load_bag(filename[0]) self._timeline.set_publishing_state(True)
def _handle_load_clicked(self): filenames = QFileDialog.getOpenFileNames( self, self.tr('Load from Files'), self.last_open_dir, self.tr('Bag files {.bag} (*.bag)')) if filenames and filenames[0]: self.last_open_dir = QFileInfo( filenames[0][0]).absoluteDir().absolutePath() for filename in filenames[0]: self.load_bag(filename)
def btnClicked(self): tmp_path = os.path.join(os.path.expanduser('~'), "Documents", "hg_rosbag", "test_files") filename = QFileDialog.getOpenFileName(self._annotator_widget, "Open File", tmp_path) bag = rosbag.Bag(filename[0]) self._timeline.add_bag(bag) #self.OpenFile() print self._message_stamp
def change_gait_directory(self): self.gait_directory = str( QFileDialog.getExistingDirectory( None, 'Select a directory to save gaits')) if self.gait_directory == '': # If directory dialogue is canceled self.gait_directory = None self.change_gait_directory_button.setText( 'Select a gait directory...') else: self.change_gait_directory_button.setText(self.gait_directory)
def save(self): ''' Saves all currently recorded frames into a json file ''' self.treeModeChanged(self._previousTreeMode) self.set_metadata() if not self._saveDir: self._saveDir = QFileDialog.getExistingDirectory() status = self._recorder.save_animation(self._saveDir, self._widget.lineAnimationName.text(), self._checkBoxesSave) self._widget.statusBar.showMessage(status)
def open_file_dialogue(self, path_to_open: os.path = None): if path_to_open is None: path_to_open = os.path.join(self.march_path, "ros2", "src", "gaits", "march_gait_files") return QFileDialog.getOpenFileName( self, "Select a subgait to import.", path_to_open, "March Subgait (*.subgait)", )
def _save_image(self): file_name, _ = QFileDialog.getSaveFileName(self._widget, self.tr('Save as image'), 'rosgraph.png', self.tr('Image (*.bmp *.jpg *.png *.tiff)')) if file_name is None or file_name == '': return img = QImage((self._scene.sceneRect().size() * 2.0).toSize(), QImage.Format_ARGB32_Premultiplied) painter = QPainter(img) painter.setRenderHint(QPainter.Antialiasing) self._scene.render(painter) painter.end() img.save(file_name)
def _save_dot(self): file_name, _ = QFileDialog.getSaveFileName(self._widget, self.tr('Save as DOT'), 'rospackgraph.dot', self.tr('DOT graph (*.dot)')) if file_name is None or file_name == '': return handle = QFile(file_name) if not handle.open(QIODevice.WriteOnly | QIODevice.Text): return handle.write(self._current_dotcode) handle.close()
def _save_image(self): file_name, _ = QFileDialog.getSaveFileName(self._widget, self.tr('Save as image'), 'rospackgraph.png', self.tr('Image (*.bmp *.jpg *.png *.tiff)')) if file_name is None or file_name == '': return img = QImage((self._scene.sceneRect().size() * 2.0).toSize(), QImage.Format_ARGB32_Premultiplied) painter = QPainter(img) painter.setRenderHint(QPainter.Antialiasing) self._scene.render(painter) painter.end() img.save(file_name)
def _save_dot(self): file_name, _ = QFileDialog.getSaveFileName(self._widget, self.tr('Save as DOT'), 'rosgraph.dot', self.tr('DOT graph (*.dot)')) if file_name is None or file_name == '': return handle = QFile(file_name) if not handle.open(QIODevice.WriteOnly | QIODevice.Text): return handle.write(self._current_dotcode) handle.close()
def onButtonClicked(self): import inspect, os filepath = os.path.dirname( os.path.abspath(inspect.getfile( inspect.currentframe()))) + "/log/save_csv.log" current_directory = self.get_current_opened_directory(filepath) window = self.window.text() try: val = float(window) except ValueError: QMessageBox.about(self, "Error in Window Time", "That's not a number!") return if val >= self.duration: QMessageBox.about( self, "Error in Window Time", "time need to be smaller than: " + str(self.duration)) return # filename = QFileDialog.getSaveFileName(self, self.tr('csv File'), current_directory, self.tr('csv (*.csv)')) saved_dir = str( QFileDialog.getExistingDirectory(self, "Select Directory", current_directory)) # if filename[0] != '': # with open(filepath, "w") as f: # f.write(filename[0]) if saved_dir != '': with open(filepath, "w") as f: f.write(saved_dir) topics = self.selected_bag_topics specific_features_selection = self.selected_specific_features general_features_selection = self.selected_general_features with open(get_path() + 'logger.log', "w") as f: for topic in topics: f.write(topic + "\n") for topic1 in specific_features_selection: f.write(topic1 + "\n") for topic2 in general_features_selection: f.write(topic2 + "\n") ef = E.ExtractFeatures(topics, float(window), specific_features_selection, general_features_selection) counter = 0 for bag_file in self.bag_files: df = ef.generate_features(bag_file) if len(self.bag_files) == 1: counter = -1 # temp = filename + "/" + # temp = get_corrent_file_name(filename[0], ".csv", counter) csv_path = generate_csv_from_bag(saved_dir, bag_file) # temp = "%s_%s%s" % (filename[0],counter,".csv") E.write_to_csv(csv_path, df) counter = counter + 1 QMessageBox.about(self, "csv export", "csv was exported successfuly")
def _handle_save_clicked(self): # Get the bag name to record to, prepopulating with a file name based on the current date/time proposed_filename = time.strftime('%Y-%m-%d-%H-%M-%S', time.localtime(time.time())) filename = QFileDialog.getSaveFileName( self, self.tr('Save selected region...'), proposed_filename, self.tr('Bag files {.bag} (*.bag)'))[0] if filename != '': filename = filename.strip() if not filename.endswith('.bag'): filename += '.bag' # Copy the highlighted region self._timeline.copy_region_to_bag(filename)
def _import(self): file_path, _ = QFileDialog.getOpenFileName(self, self.tr('Import custom graph'), None, self.tr('DOT graph (*.dot)')) if file_path is None or file_path == '': return custom_graph = Graph(self._dot_processor, file_path, file_path) self.decision_graphs[custom_graph.source] = custom_graph self._current_graph = custom_graph self.decision_graphs_combo_box.addItem(custom_graph.source) self.decision_graphs_combo_box.setCurrentIndex(self.decision_graphs_combo_box.findText(custom_graph.source))
def _save_svg(self): file_name, _ = QFileDialog.getSaveFileName(self._widget, self.tr('Save as SVG'), 'rospackgraph.svg', self.tr('Scalable Vector Graphic (*.svg)')) if file_name is None or file_name == '': return generator = QSvgGenerator() generator.setFileName(file_name) generator.setSize((self._scene.sceneRect().size() * 2.0).toSize()) painter = QPainter(generator) painter.setRenderHint(QPainter.Antialiasing) self._scene.render(painter) painter.end()
def _load_dot(self, file_name=None): if file_name is None: file_name, _ = QFileDialog.getOpenFileName( self._widget, self.tr('Open graph from file'), None, self.tr('DOT graph (*.dot)')) if file_name is None or file_name == '': return try: fhandle = open(file_name, 'rb') dotcode = fhandle.read() fhandle.close() except IOError: return self._update_graph_view(dotcode)
def _on_record_settings_selected(self, all_topics, selected_topics): # TODO verify master is still running filename = QFileDialog.getSaveFileName(self, self.tr('Select prefix for new Bag File'), '.', self.tr('Bag files {.bag} (*.bag)')) if filename[0] != '': prefix = filename[0].strip() # Get filename to record to record_filename = time.strftime('%Y-%m-%d-%H-%M-%S.bag', time.localtime(time.time())) if prefix.endswith('.bag'): prefix = prefix[:-len('.bag')] if prefix: record_filename = '%s_%s' % (prefix, record_filename) rospy.loginfo('Recording to %s.' % record_filename) self.load_button.setEnabled(False) self._recording = True self._timeline.record_bag(record_filename, all_topics, selected_topics)
def _load_dot(self, file_name=None): if file_name is None: file_name, _ = QFileDialog.getOpenFileName(self._widget, self.tr('Open graph from file'), None, self.tr('DOT graph (*.dot)')) if file_name is None or file_name == '': return try: fh = open(file_name, 'rb') dotcode = fh.read() fh.close() except IOError: return # disable controls customizing fetched ROS graph self._widget.graph_type_combo_box.setEnabled(False) self._widget.filter_line_edit.setEnabled(False) self._widget.topic_filter_line_edit.setEnabled(False) self._widget.namespace_cluster_check_box.setEnabled(False) self._widget.actionlib_check_box.setEnabled(False) self._widget.dead_sinks_check_box.setEnabled(False) self._widget.leaf_topics_check_box.setEnabled(False) self._widget.quiet_check_box.setEnabled(False) self._update_graph_view(dotcode)
def _handle_load_clicked(self, checked): filename = QFileDialog.getOpenFileName(self, self.tr('Load from File'), '.', self.tr('rqt_console message file {.csv} (*.csv)')) if filename[0] != '': try: with open(filename[0], 'r') as h: lines = h.read().splitlines() except IOError as e: qWarning(str(e)) return False # extract column header columns = lines[0].split(';') if len(lines) < 2: return True # join wrapped lines rows = [] last_wrapped = False for line in lines[1:]: # ignore empty lines if not line: continue # check for quotes and remove them if line == '"': has_prefix = not last_wrapped has_suffix = last_wrapped line = '' else: has_prefix = line[0] == '"' if has_prefix: line = line[1:] has_suffix = line[-1] == '"' if has_suffix: line = line[:-1] # ignore line without prefix if previous line was not wrapped if not has_prefix and not last_wrapped: continue # remove wrapped line which is not continued on the next line if last_wrapped and has_prefix: rows.pop() # add/append lines if last_wrapped: rows[-1] += line else: # add line without quote prefix rows.append(line) last_wrapped = not has_suffix # generate message for each row messages = [] skipped = [] for row in rows: data = row.split('";"') msg = Message() msg.set_stamp_format('hh:mm:ss.ZZZ (yyyy-MM-dd)') for i, column in enumerate(columns): value = data[i] if column == 'message': msg.message = value.replace('\\"', '"') elif column == 'severity': msg.severity = int(value) if msg.severity not in Message.SEVERITY_LABELS: skipped.append('Unknown severity value: %s' % value) msg = None break elif column == 'stamp': parts = value.split('.') if len(parts) != 2: skipped.append('Unknown timestamp format: %s' % value) msg = None break msg.stamp = (int(parts[0]), int(parts[1])) elif column == 'topics': msg.topics = value.split(',') elif column == 'node': msg.node = value elif column == 'location': msg.location = value else: skipped.append('Unknown column: %s' % column) msg = None break if msg: messages.append(msg) if skipped: qWarning('Skipped %d rows since they do not appear to be in rqt_console message file format:\n- %s' % (len(skipped), '\n- '.join(skipped))) if messages: self._model.insert_rows(messages) self._handle_pause_clicked(True) return True else: qWarning('File does not appear to be a rqt_console message file: missing file header.') return False
def _handle_config_ref_button_clicked(self): rospack = rospkg.RosPack() fname = QFileDialog.getOpenFileName(self._widget, 'Open file', rospack.get_path('lgsvl_simulator_bridge')+'/config') self._widget.configpath_box.setText(fname[0])
def _handle_load_clicked(self): filename = QFileDialog.getOpenFileName( self, self.tr('Load from File'), '.', self.tr('YAML file {.yaml} (*.yaml)')) if filename[0] != '': self.load_param(filename[0])
def _handle_save_clicked(self): filename = QFileDialog.getSaveFileName(self, self.tr('Save selected region to file...'), '.', self.tr('Bag files {.bag} (*.bag)')) if filename[0] != '': self._timeline.copy_region_to_bag(filename[0])
def _handle_load_clicked(self): filename = QFileDialog.getOpenFileName(self, self.tr('Load from File'), '.', self.tr('Bag files {.bag} (*.bag)')) if filename[0] != '': self.load_bag(filename[0])
def _handle_save_clicked(self): filename = QFileDialog.getSaveFileName( self, self.tr('Save parameters to file...'), '.', self.tr('YAML files {.yaml} (*.yaml)')) if filename[0] != '': self.save_param(filename[0])