label.py
Go to the documentation of this file.
1 from distutils.version import LooseVersion
2 import math
3 import os
4 import sys
5 from threading import Lock
6 
7 import python_qt_binding
8 import python_qt_binding.QtCore as QtCore
9 from python_qt_binding.QtCore import QEvent
10 from python_qt_binding.QtCore import QSize
11 from python_qt_binding.QtCore import Qt
12 from python_qt_binding.QtCore import QTimer
13 from python_qt_binding.QtCore import qWarning
14 from python_qt_binding.QtCore import Slot
15 import python_qt_binding.QtGui as QtGui
16 from python_qt_binding.QtGui import QBrush
17 from python_qt_binding.QtGui import QColor
18 from python_qt_binding.QtGui import QFont
19 from python_qt_binding.QtGui import QIcon
20 from python_qt_binding.QtGui import QPainter
21 from python_qt_binding.QtGui import QPen
22 import yaml
23 
24 from resource_retriever import get_filename
25 import roslib
26 import rospy
27 from rqt_gui_py.plugin import Plugin
28 import rqt_plot
29 from std_msgs.msg import Bool
30 from std_msgs.msg import Time
31 from std_msgs.msg import String
32 
33 from .util import get_slot_type_field_names
34 from .hist import ROSData
35 
36 if LooseVersion(python_qt_binding.QT_BINDING_VERSION).version[0] >= 5:
37  from python_qt_binding.QtWidgets import QAction
38  from python_qt_binding.QtWidgets import QComboBox
39  from python_qt_binding.QtWidgets import QCompleter
40  from python_qt_binding.QtWidgets import QDialog
41  from python_qt_binding.QtWidgets import QLabel
42  from python_qt_binding.QtWidgets import QLineEdit
43  from python_qt_binding.QtWidgets import QMenu
44  from python_qt_binding.QtWidgets import QMessageBox
45  from python_qt_binding.QtWidgets import QPushButton
46  from python_qt_binding.QtWidgets import QSizePolicy
47  from python_qt_binding.QtWidgets import QVBoxLayout
48  from python_qt_binding.QtWidgets import QWidget
49 
50 else:
51  from python_qt_binding.QtGui import QAction
52  from python_qt_binding.QtGui import QComboBox
53  from python_qt_binding.QtGui import QCompleter
54  from python_qt_binding.QtGui import QDialog
55  from python_qt_binding.QtGui import QLabel
56  from python_qt_binding.QtGui import QLineEdit
57  from python_qt_binding.QtGui import QMenu
58  from python_qt_binding.QtGui import QMessageBox
59  from python_qt_binding.QtGui import QPushButton
60  from python_qt_binding.QtGui import QSizePolicy
61  from python_qt_binding.QtGui import QVBoxLayout
62  from python_qt_binding.QtGui import QWidget
63 
64 
65 class LineEditDialog(QDialog):
66  def __init__(self, parent=None):
67  super(LineEditDialog, self).__init__()
68  self.value = None
69  self.button_pressed = False
70  vbox = QVBoxLayout(self)
71  # combo box
72  model = QtGui.QStandardItemModel(self)
73  for elm in rospy.get_param_names():
74  model.setItem(model.rowCount(), 0, QtGui.QStandardItem(elm))
75  self.combo_box = QComboBox(self)
76  self.line_edit = QLineEdit()
77  self.combo_box.setLineEdit(self.line_edit)
78  self.combo_box.setCompleter(QCompleter())
79  self.combo_box.setModel(model)
80  self.combo_box.completer().setModel(model)
81  self.combo_box.lineEdit().setText('')
82  vbox.addWidget(self.combo_box)
83  # button
84  button = QPushButton()
85  button.setText("Done")
86  button.clicked.connect(self.buttonCallback)
87  vbox.addWidget(button)
88  self.setLayout(vbox)
89 
90  def buttonCallback(self, event):
91  self.value = self.line_edit.text()
92  self.button_pressed = True
93  self.close()
94 
95 
97  """
98  rqt plugin to provide simple label
99  """
100  def __init__(self, context):
101  super(StringLabel, self).__init__(context)
102  self.setObjectName("StringLabel")
104  context.add_widget(self._widget)
105 
106  def save_settings(self, plugin_settings, instance_settings):
107  self._widget.save_settings(plugin_settings, instance_settings)
108 
109  def restore_settings(self, plugin_settings, instance_settings):
110  self._widget.restore_settings(plugin_settings, instance_settings)
111 
114 
115 
116 class StringLabelWidget(QWidget):
117  def __init__(self):
118  super(StringLabelWidget, self).__init__()
119  self.lock = Lock()
120  vbox = QVBoxLayout(self)
121  self.label = QLabel()
122  self.label.setAlignment(Qt.AlignLeft)
123  self.label.setSizePolicy(
124  QSizePolicy(QSizePolicy.Ignored, QSizePolicy.Ignored))
125  font = QFont("Helvetica", 14)
126  self.label.setFont(font)
127  self.label.setWordWrap(True)
128  vbox.addWidget(self.label)
129  self.string_sub = None
130  self._string_topics = []
131  self._update_topic_timer = QTimer(self)
132  self._update_topic_timer.timeout.connect(self.updateTopics)
133  self._update_topic_timer.start(1000)
134  self._active_topic = None
135  # to update label visualization
137  self._rosdata = None
138  self._start_time = rospy.get_time()
139  self._update_label_timer = QTimer(self)
140  self._update_label_timer.timeout.connect(self.updateLabel)
141  self._update_label_timer.start(40)
142 
144  self._dialog.exec_()
145  self.setupSubscriber(self._dialog.value)
146 
147  def updateLabel(self):
148  if not self._rosdata:
149  return
150  try:
151  _, data_y = self._rosdata.next()
153  self._rosdata = None
154  return
155  if len(data_y) == 0:
156  return
157  latest = data_y[-1] # get latest data
158  # supports std_msgs/String as well as string data nested in rosmsg
159  if type(latest) == String:
160  self.string = latest.data
161  else:
162  self.string = latest
163  try:
164  self.label.setText(self.string)
165  except TypeError as e:
166  rospy.logwarn(e)
167 
168  def updateTopics(self):
169  need_to_update = False
170  for (topic, topic_type) in rospy.get_published_topics():
171  msg = roslib.message.get_message_class(topic_type)
172  field_names = get_slot_type_field_names(msg, slot_type='string')
173  for field in field_names:
174  string_topic = topic + field
175  if string_topic not in self._string_topics:
176  self._string_topics.append(string_topic)
177  need_to_update = True
178  if need_to_update:
179  self._string_topics = sorted(self._string_topics)
180  self._dialog.combo_box.clear()
181  for topic in self._string_topics:
182  self._dialog.combo_box.addItem(topic)
183  if self._active_topic:
184  if self._active_topic not in self._string_topics:
185  self._string_topics.append(self._active_topic)
186  self._dialog.combo_box.addItem(self._active_topic)
187  self._dialog.combo_box.setCurrentIndex(
188  self._string_topics.index(self._active_topic))
189 
190  def setupSubscriber(self, topic):
191  if not self._rosdata:
192  self._rosdata = ROSData(topic, self._start_time)
193  else:
194  if self._rosdata != topic:
195  self._rosdata.close()
196  self._rosdata = ROSData(topic, self._start_time)
197  else:
198  rospy.logwarn("%s is already subscribed", topic)
199  self._active_topic = topic
200 
201  def onActivated(self, number):
202  self.setupSubscriber(self._string_topics[number])
203 
204  def save_settings(self, plugin_settings, instance_settings):
205  if self._active_topic:
206  instance_settings.set_value("active_topic", self._active_topic)
207 
208  def restore_settings(self, plugin_settings, instance_settings):
209  if instance_settings.value("active_topic"):
210  topic = instance_settings.value("active_topic")
211  self._dialog.combo_box.addItem(topic)
212  self.setupSubscriber(topic)
rqt_plot::rosplot::RosPlotException
jsk_rqt_plugins.label.LineEditDialog.button_pressed
button_pressed
Definition: label.py:69
jsk_rqt_plugins.label.StringLabelWidget._update_topic_timer
_update_topic_timer
Definition: label.py:131
jsk_rqt_plugins.label.LineEditDialog.__init__
def __init__(self, parent=None)
Definition: label.py:66
jsk_rqt_plugins.label.StringLabelWidget._start_time
_start_time
Definition: label.py:138
jsk_rqt_plugins.label.StringLabelWidget
Definition: label.py:116
jsk_rqt_plugins.util.get_slot_type_field_names
def get_slot_type_field_names(msg, slot_type, field_name=None, found=None)
Definition: util.py:7
jsk_rqt_plugins.label.StringLabelWidget._dialog
_dialog
Definition: label.py:136
rqt_plot::rosplot::ROSData
jsk_rqt_plugins.label.StringLabel.trigger_configuration
def trigger_configuration(self)
Definition: label.py:112
rqt_gui_py::plugin::Plugin
jsk_rqt_plugins.label.StringLabel
Definition: label.py:96
jsk_rqt_plugins.label.StringLabel.save_settings
def save_settings(self, plugin_settings, instance_settings)
Definition: label.py:106
jsk_rqt_plugins.label.StringLabelWidget.label
label
Definition: label.py:121
jsk_rqt_plugins.label.StringLabelWidget.restore_settings
def restore_settings(self, plugin_settings, instance_settings)
Definition: label.py:208
jsk_rqt_plugins.label.StringLabelWidget.onActivated
def onActivated(self, number)
Definition: label.py:201
jsk_rqt_plugins.label.StringLabelWidget.string
string
Definition: label.py:160
sample_2d_plot.type
type
Definition: sample_2d_plot.py:20
jsk_rqt_plugins.label.LineEditDialog.line_edit
line_edit
Definition: label.py:76
jsk_rqt_plugins.label.StringLabelWidget._update_label_timer
_update_label_timer
Definition: label.py:139
jsk_rqt_plugins.label.LineEditDialog.value
value
Definition: label.py:68
jsk_rqt_plugins.label.StringLabelWidget.__init__
def __init__(self)
Definition: label.py:117
jsk_rqt_plugins.label.StringLabelWidget.lock
lock
Definition: label.py:119
jsk_rqt_plugins.label.LineEditDialog.combo_box
combo_box
Definition: label.py:75
jsk_rqt_plugins.label.StringLabel.restore_settings
def restore_settings(self, plugin_settings, instance_settings)
Definition: label.py:109
jsk_rqt_plugins.label.StringLabelWidget.string_sub
string_sub
Definition: label.py:129
jsk_rqt_plugins.label.StringLabelWidget.setupSubscriber
def setupSubscriber(self, topic)
Definition: label.py:190
jsk_rqt_plugins.label.StringLabelWidget._active_topic
_active_topic
Definition: label.py:134
jsk_rqt_plugins.label.StringLabel.__init__
def __init__(self, context)
Definition: label.py:100
rqt_gui_py::plugin
jsk_rqt_plugins.label.LineEditDialog
Definition: label.py:65
jsk_rqt_plugins.label.StringLabelWidget.updateTopics
def updateTopics(self)
Definition: label.py:168
jsk_rqt_plugins.label.StringLabelWidget.trigger_configuration
def trigger_configuration(self)
Definition: label.py:143
jsk_rqt_plugins.label.StringLabelWidget.updateLabel
def updateLabel(self)
Definition: label.py:147
jsk_rqt_plugins.label.StringLabel._widget
_widget
Definition: label.py:103
jsk_rqt_plugins.label.StringLabelWidget._string_topics
_string_topics
Definition: label.py:130
jsk_rqt_plugins.label.LineEditDialog.buttonCallback
def buttonCallback(self, event)
Definition: label.py:90
jsk_rqt_plugins.label.StringLabelWidget._rosdata
_rosdata
Definition: label.py:137
jsk_rqt_plugins.label.StringLabelWidget.save_settings
def save_settings(self, plugin_settings, instance_settings)
Definition: label.py:204


jsk_rqt_plugins
Author(s):
autogenerated on Mon Apr 7 2025 02:49:46