38 from python_qt_binding.QtCore
import pyqtSlot
39 from python_qt_binding.QtCore
import Qt
40 from python_qt_binding.QtCore
import Signal
41 from python_qt_binding.QtGui
import QFont
42 from python_qt_binding.QtWidgets
import QApplication
43 from python_qt_binding.QtWidgets
import QHBoxLayout
44 from python_qt_binding.QtWidgets
import QLabel
45 from python_qt_binding.QtWidgets
import QLineEdit
46 from python_qt_binding.QtWidgets
import QPushButton
47 from python_qt_binding.QtWidgets
import QSlider
48 from python_qt_binding.QtWidgets
import QVBoxLayout
49 from python_qt_binding.QtWidgets
import QGridLayout
50 from python_qt_binding.QtWidgets
import QScrollArea
51 from python_qt_binding.QtWidgets
import QSpinBox
52 from python_qt_binding.QtWidgets
import QWidget
58 sliderUpdateTrigger = Signal()
61 super(JointStatePublisherGui, self).
__init__()
62 self.setWindowTitle(title)
69 self.
scroll.setWidgetResizable(
True)
73 font = QFont(
"Helvetica", 9, QFont.Bold)
77 for name
in self.
jsp.joint_list:
78 if name
not in self.
jsp.free_joints:
80 joint = self.
jsp.free_joints[name]
82 if joint[
'min'] == joint[
'max']:
85 joint_layout = QVBoxLayout()
86 row_layout = QHBoxLayout()
90 row_layout.addWidget(label)
91 display = QLineEdit(
"0.00")
92 display.setAlignment(Qt.AlignRight)
94 display.setReadOnly(
True)
95 row_layout.addWidget(display)
97 joint_layout.addLayout(row_layout)
99 slider = QSlider(Qt.Horizontal)
102 slider.setRange(0, RANGE)
103 slider.setValue(int(RANGE/2))
105 joint_layout.addWidget(slider)
107 self.
joint_map[name] = {
'slidervalue': 0,
'display': display,
108 'slider': slider,
'joint': joint}
110 slider.valueChanged.connect(
lambda event,name=name: self.
onValueChangedOne(name))
112 sliders.append(joint_layout)
121 for item, pos
in zip(sliders, self.
positions):
159 joint_info[
'slidervalue'] = joint_info[
'slider'].value()
160 joint = joint_info[
'joint']
161 joint[
'position'] = self.
sliderToValue(joint_info[
'slidervalue'], joint)
162 joint_info[
'display'].setText(
"%.3f" % joint[
'position'])
169 for name, joint_info
in self.
joint_map.items():
170 joint = joint_info[
'joint']
171 joint_info[
'slidervalue'] = self.
valueToSlider(joint[
'position'],
173 joint_info[
'slider'].setValue(joint_info[
'slidervalue'])
179 rospy.loginfo(
"Centering")
180 for name, joint_info
in self.
joint_map.items():
181 joint = joint_info[
'joint']
182 joint_info[
'slider'].setValue(self.
valueToSlider(joint[
'zero'], joint))
199 for item, pos
in zip(items, self.
positions):
205 positions = [(y, x)
for x
in range(int((math.ceil(float(num_items) / num_rows))))
for y
in range(num_rows)]
206 positions = positions[:num_items]
213 rospy.loginfo(
"Randomizing")
214 for name, joint_info
in self.
joint_map.items():
215 joint = joint_info[
'joint']
216 joint_info[
'slider'].setValue(
217 self.
valueToSlider(random.uniform(joint[
'min'], joint[
'max']), joint))
220 for name, joint_info
in self.
joint_map.items():
221 joint_info[
'slidervalue'] = joint_info[
'slider'].value()
225 return int((value - joint[
'min']) * float(RANGE) / (joint[
'max'] - joint[
'min']))
228 pctvalue = slider / float(RANGE)
229 return joint[
'min'] + (joint[
'max']-joint[
'min']) * pctvalue