def browseForLocation(self): location = QFileDialog.getOpenFileName(filter="*.bag;;*", directory=os.path.dirname(self.demoLocation.text()))[0] if len(location) == 0: return self.demoLocation.setText(location) self.loadLocation()
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 _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 load_file(self): filename = QFileDialog.getOpenFileName(self, self.tr("Open File"), "../", self.tr("Yaml (*.yaml)")) self.filelist.append(filename[0]) self.filenames.append(os.path.basename(filename[0])) self.fileLabel.setText('Files: ' + str(self.filenames)) self.fileLabel.setWordWrap(True)
def _on_import_perspective(self): file_name, _ = QFileDialog.getOpenFileName( self._menu_manager.menu, self.tr('Import perspective from file'), None, self.tr('Perspectives (*.perspective)')) if file_name is None or file_name == '': return perspective_name = os.path.basename(file_name) suffix = '.perspective' if perspective_name.endswith(suffix): perspective_name = perspective_name[:-len(suffix)] if perspective_name in self.perspectives: perspective_name = self._choose_new_perspective_name(False) if perspective_name is None: return self._create_perspective(perspective_name, clone_perspective=False) # read perspective from file file_handle = open(file_name, 'r') #data = eval(file_handle.read()) data = json.loads(file_handle.read()) self._convert_values(data, self._import_value) new_settings = self._get_perspective_settings(perspective_name) self._set_dict_on_settings(data, new_settings) self.switch_perspective(perspective_name, settings_changed=True, save_before=True)
def loadDatabase(self, unused=None): # Load database filename = QFileDialog.getOpenFileName( self.widget, caption="Load track database", filter="*.tracks", directory=self.defaultDatabaseDirectory)[0] self.loadGivenDatabase(filename)
def on_open_xml_clicked(self): (fileName, _) = QFileDialog.getOpenFileName( self, "Load launch file", self.__current_path, "Config files (*.launch);;All files (*)") if fileName: self.__current_path = os.path.dirname(fileName) nm.settings().launch_history_add(fileName) self.load_signal.emit(fileName, [], None)
def on_open_xml_clicked(self): (fileName, _) = QFileDialog.getOpenFileName(self, "Load launch file", self.__current_path, "Config files (*.launch);;All files (*)") if fileName: self.__current_path = os.path.dirname(fileName) self.launchlist_model.add2LoadHistory(fileName) self.load_signal.emit(fileName)
def browseForLocation(self): location = QFileDialog.getOpenFileName( filter="*.bag;;*", directory=os.path.dirname(self.demoLocation.text()))[0] if len(location) == 0: return self.demoLocation.setText(location) self.loadLocation()
def on_open_xml_clicked(self): (fileName, _) = QFileDialog.getOpenFileName(self, "Load launch file", self.__current_path, "Config files (*.launch);;All files (*)") if fileName: self.__current_path = os.path.dirname(fileName) nm.settings().launch_history_add(fileName) self.load_signal.emit(fileName, [], None)
def load_file(self): filename = QFileDialog.getOpenFileName(self, self.tr("Open File"), "../", self.tr("Yaml (*.yaml)")) if os.path.basename(filename[0].encode("ascii")) == "": return self.filelist.append(filename[0]) self.filenames.append(os.path.basename(filename[0].encode("ascii"))) self.fileLabel.setText('Files: ' + str(self.filenames)) self.fileLabel.setWordWrap(True)
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: handle = open(filename[0]) except IOError as e: qWarning(str(e)) return self.pause_button.setChecked(True) self._handle_pause_clicked(True) self._datamodel.load_from_file(handle) handle.close() self.update_status()
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 _load_dot(self, file_name=None): if file_name is None: file_name, _ = QFileDialog.getOpenFileName( self._widget, self.tr('Open tree from DOT 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_import_perspective(self): file_name, _ = QFileDialog.getOpenFileName(self._menu_manager.menu, self.tr('Import perspective from file'), None, self.tr('Perspectives (*.perspective)')) if file_name is None or file_name == '': return perspective_name = os.path.basename(file_name) suffix = '.perspective' if perspective_name.endswith(suffix): perspective_name = perspective_name[:-len(suffix)] if perspective_name in self.perspectives: perspective_name = self._choose_new_perspective_name(False) if perspective_name is None: return self.import_perspective_from_file(file_name, perspective_name)
def _load_bag(self, file_name=None): """Load a bag from file. If no file name is given, a dialogue will pop up and the user will be asked to select a file. If the bag file selected doesn't have any valid topic, nothing will happen. If there are valid topics, we load the bag and add a timeline for managing it. """ if file_name is None: file_name, _ = QFileDialog.getOpenFileName( self._widget, self.tr('Open trees from bag file'), None, self.tr('ROS bag (*.bag)')) if file_name is None or file_name == "": return rospy.loginfo("Reading bag from {0}".format(file_name)) bag = rosbag.Bag(file_name, 'r') # ugh... topics = list(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]) tree_topics = [] # only look at the first matching topic for ind, tp in enumerate(types): if tp == 'py_trees_msgs/BehaviourTree': tree_topics.append(topics[ind]) if len(tree_topics) == 0: rospy.logerr('Requested bag did not contain any valid topics.') return self.message_list = [] self._viewing_bag = True rospy.loginfo('Reading behaviour trees from topic {0}'.format( tree_topics[0])) for unused_topic, msg, unused_t in bag.read_messages( topics=[tree_topics[0]]): self.message_list.append(msg) self.current_topic = tree_topics[0] self._set_timeline_buttons(first_snapshot=True, previous_snapshot=True, next_snapshot=False, last_snapshot=False) self._set_bag_timeline(bag) self._refresh_view.emit()
def _on_import_perspective(self): file_name, _ = QFileDialog.getOpenFileName( self._menu_manager.menu, self.tr('Import perspective from file'), None, self.tr('Perspectives (*.perspective)')) if file_name is None or file_name == '': return perspective_name = os.path.basename(file_name) suffix = '.perspective' if perspective_name.endswith(suffix): perspective_name = perspective_name[:-len(suffix)] if perspective_name in self.perspectives: perspective_name = self._choose_new_perspective_name(False) if perspective_name is None: return self.import_perspective_from_file(file_name, perspective_name)
def _handle_load_clicked(self): filename = QFileDialog.getOpenFileName( self, self.tr('Load from File'), '.', self.tr('Bag files {.bag} (*.bag)')) if filename[0] != '': bag = rosbag.Bag(filename[0]) self.play_button.setEnabled(True) self.thumbs_button.setEnabled(True) self.zoom_in_button.setEnabled(True) self.zoom_out_button.setEnabled(True) self.zoom_all_button.setEnabled(True) self.faster_button.setEnabled(True) self.slower_button.setEnabled(True) self.begin_button.setEnabled(True) self.end_button.setEnabled(True) self.save_button.setEnabled(True) self.record_button.setEnabled(False) self._timeline.add_bag(bag)
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 _handle_load_clicked(self): filename = QFileDialog.getOpenFileName( self, self.tr('Load from File'), '.', self.tr('YAML files {.yaml} (*.yaml)')) if filename[0] != '': with open(filename[0], 'r') as infile: try: self.places_dict = yaml.load(infile) for k in self._sceneItems.keys(): for item in self._sceneItems[k].keys(): self._scene.removeItem(self._sceneItems[k][item]) for name in self.places_dict.keys(): # q = numpy.asarray(self.places_dict[name][3:7]) scene_pos = self._gridToScene( self.places_dict[name][0], self.places_dict[name][1], q) # drawing the items self._sceneItems[name] = {"text": QGraphicsTextItem()} self._sceneItems[name]["text"].setDefaultTextColor( QColor(0, 0, 255)) self._sceneItems[name]["text"].setFont( QFont("Times", 10)) self._sceneItems[name]["text"].setPlainText(name) x_c = scene_pos[0] - self._sceneItems[name][ "text"].boundingRect().width() / 2.0 self._sceneItems[name]["text"].setPos( x_c, scene_pos[1]) self._scene.addItem(self._sceneItems[name]["text"]) self._sceneItems[name]["rec"] = self._scene.addRect( QRectF((scene_pos[0] - 2), (scene_pos[1] - 2), 4, 4)) line = QLineF(scene_pos[0], scene_pos[1], (scene_pos[0] - self._mag * cos(radians(scene_pos[3]))), (scene_pos[1] + self._mag * sin(radians(scene_pos[3])))) self._sceneItems[name]["line"] = self._scene.addLine( line, pen=QPen(Qt.red, 2)) except yaml.scanner.ScannerError: QMessageBox.critical(self, "Error!", "Invalid YAML file.")
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): 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_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 open_FileDialog(self): filename = QFileDialog.getOpenFileName(self.parent, 'Open file', os.path.expanduser('~')) self.parent.filename = filename[0] self.parent.qimage = QImage(self.parent.filename, 'JPEG')
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_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_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])