1 from distutils.version
import LooseVersion
6 import python_qt_binding
7 import python_qt_binding.QtCore
as QtCore
8 from python_qt_binding.QtCore
import QEvent
9 from python_qt_binding.QtCore
import QSize
10 from python_qt_binding.QtCore
import Qt
11 from python_qt_binding.QtCore
import QTimer
12 from python_qt_binding.QtCore
import qWarning
13 from python_qt_binding.QtCore
import Slot
14 import python_qt_binding.QtGui
as QtGui
15 from python_qt_binding.QtGui
import QBrush
16 from python_qt_binding.QtGui
import QColor
17 from python_qt_binding.QtGui
import QFont
18 from python_qt_binding.QtGui
import QIcon
19 from python_qt_binding.QtGui
import QPainter
20 from python_qt_binding.QtGui
import QPen
23 from resource_retriever
import get_filename
26 from std_msgs.msg
import Bool
27 from std_msgs.msg
import Time
28 from std_srvs.srv
import Empty
29 from std_srvs.srv
import SetBool
30 from std_srvs.srv
import Trigger
32 if LooseVersion(python_qt_binding.QT_BINDING_VERSION).version[0] >= 5:
33 from python_qt_binding.QtWidgets
import QAction
34 from python_qt_binding.QtWidgets
import QComboBox
35 from python_qt_binding.QtWidgets
import QCompleter
36 from python_qt_binding.QtWidgets
import QDialog
37 from python_qt_binding.QtWidgets
import QFileDialog
38 from python_qt_binding.QtWidgets
import QGroupBox
39 from python_qt_binding.QtWidgets
import QHBoxLayout
40 from python_qt_binding.QtWidgets
import QMenu
41 from python_qt_binding.QtWidgets
import QMessageBox
42 from python_qt_binding.QtWidgets
import QRadioButton
43 from python_qt_binding.QtWidgets
import QSizePolicy
44 from python_qt_binding.QtWidgets
import QToolButton
45 from python_qt_binding.QtWidgets
import QVBoxLayout
46 from python_qt_binding.QtWidgets
import QWidget
47 from python_qt_binding.QtWidgets
import QTabWidget
49 from python_qt_binding.QtGui
import QAction
50 from python_qt_binding.QtGui
import QComboBox
51 from python_qt_binding.QtGui
import QCompleter
52 from python_qt_binding.QtGui
import QDialog
53 from python_qt_binding.QtGui
import QFileDialog
54 from python_qt_binding.QtGui
import QGroupBox
55 from python_qt_binding.QtGui
import QHBoxLayout
56 from python_qt_binding.QtGui
import QMenu
57 from python_qt_binding.QtGui
import QMessageBox
58 from python_qt_binding.QtGui
import QRadioButton
59 from python_qt_binding.QtGui
import QSizePolicy
60 from python_qt_binding.QtGui
import QToolButton
61 from python_qt_binding.QtGui
import QVBoxLayout
62 from python_qt_binding.QtGui
import QWidget
63 from python_qt_binding.QtGui
import QTabWidget
70 super(ServiceTabbedButtonGeneralWidget, self).
__init__()
73 if rospy.has_param(
"~tabbed_layout"):
74 tabbed_layout = rospy.get_param(
"~tabbed_layout")
76 if not 'tab_list' in tabbed_layout:
77 self.
showError(
"Cannot find tab_list in %s"%(tabbed_layout))
79 tab_list = tabbed_layout[
'tab_list']
81 if tb
in tabbed_layout:
82 param_settings = tabbed_layout[tb]
85 if 'type' in param_settings:
86 settings[
'type'] = param_settings[
'type']
88 if not 'name' in param_settings:
91 settings[
'name'] = param_settings[
'name']
93 if 'yaml_file' in param_settings:
94 settings[
'yaml_file'] = param_settings[
'yaml_file']
96 self.
showError(
"Cannot find yaml_file in %s"%(tb))
99 if 'namespace' in param_settings:
100 settings[
'namespace'] = param_settings[
'namespace']
105 self.
showError(
"Cannot find key %s in %s"%(tb, tabbed_layout))
107 self.
showError(
"Cannot find rosparam ~tabbed_layout")
111 self.
showError(
"there is no valid param in ~tabbed_layout")
117 qtab.addTab(wg, tb[
'name'] )
126 QMessageBox.about(self,
"ERROR", message)
138 class ServiceButtonGeneralWidget_in_tab(ServiceButtonGeneralWidget):
140 Qt widget to visualize multiple buttons
143 super(ServiceButtonGeneralWidget_in_tab, self).
__init__()
144 yaml_file = settings[
'yaml_file']
146 if 'type' in settings:
151 if 'namespace' in settings:
152 namespace = settings[
'namespace']
156 self.
_dialog.setFileMode(QFileDialog.ExistingFile)
160 resolved_yaml = get_filename(yaml_file)
161 if "file://" == resolved_yaml[0:7]:
162 resolved_yaml = resolved_yaml[len(
"file://"):]
164 with open(resolved_yaml)
as f:
165 yaml_data = yaml.safe_load(f)