def setup_gui(self, two_columns=True): if qt_version_below_5: widget_layout = QtGui.QHBoxLayout() else: widget_layout = QtWidgets.QHBoxLayout() widget_layout.addLayout(self._column_1) if two_columns: widget_layout.addLayout(self._column_2) if qt_version_below_5: main_layout = QtGui.QHBoxLayout() else: main_layout = QtWidgets.QHBoxLayout() main_layout = QtWidgets.QVBoxLayout() main_layout.addLayout(widget_layout) self._column_1.setAlignment(QtCore.Qt.AlignTop) if two_columns: self._column_2.setAlignment(QtCore.Qt.AlignTop) widget_layout.setAlignment(QtCore.Qt.AlignTop) main_layout.setAlignment(QtCore.Qt.AlignTop) self.setLayout(main_layout) self._update_info_timer = QtCore.QTimer(self) self._update_info_timer.timeout.connect(self.update_gui) self._update_info_timer.start(100)
def __init__(self, guimgr, launch, parent): super(AwPluginRemoveWindow, self).__init__(parent) self.guimgr = guimgr self.node = launch settings = QtCore.QSettings("Autoware", "AutowareLauncher") if settings.contains("geometry"): self.restoreGeometry(settings.value("geometry")) # select self.nodelist = QtWidgets.QListWidget() for child in self.node.children(): self.nodelist.addItem(child.name()) # footer cancel = QtWidgets.QPushButton("Cancel") cancel.clicked.connect(self.close) remove = QtWidgets.QPushButton("Remove") remove.clicked.connect(self.remove_launch_node) footer = QtWidgets.QHBoxLayout() footer.addStretch() footer.addWidget(cancel) footer.addWidget(remove) # widget layout = QtWidgets.QVBoxLayout() layout.addWidget(self.nodelist) layout.addLayout(footer) widget = QtWidgets.QWidget() widget.setLayout(layout) self.setCentralWidget(widget) self.setWindowTitle("Remove Launch Node")
def __init__(self): super(CenteredCheckBox, self).__init__() checkbox = QtWidgets.QCheckBox() layout = QtWidgets.QHBoxLayout(self) layout.addWidget(checkbox) layout.setAlignment(QtCore.Qt.AlignCenter) layout.setContentsMargins(0, 0, 0, 0) self.setLayout(layout)
def __init__(self, guimgr): super(AwGazeboSimulatorWidget, self).__init__() self.gazebo_process = QtCore.QProcess(self) self.launch_button = QtWidgets.QPushButton("Launch") self.setup_button = QtWidgets.QPushButton("Initial Setup") self.world_buttons = [] self.world_buttons.append( self.__create_radio_button("simple", "simple")) self.world_buttons.append(self.__create_radio_button("mcity", "mcity")) self.world_buttons.append( self.__create_radio_button("city sim", "citysim_gazebo7")) self.use_gpu_box = QtWidgets.QCheckBox("Use GPU") self.world_buttons[0].setChecked(True) self.setup_button.clicked.connect(self.__exec_setup_script) self.launch_button.setCheckable(True) self.launch_button.toggled.connect(self.__exec_simulator) self.gazebo_process.finished.connect(self.__simulator_finished) world_group = QtWidgets.QGroupBox("World") world_group.setLayout(QtWidgets.QVBoxLayout()) for world_button in self.world_buttons: world_group.layout().addWidget(world_button) world_group.layout().addStretch() config_group = QtWidgets.QGroupBox("Config") config_group.setLayout(QtWidgets.QVBoxLayout()) config_group.layout().addWidget(self.use_gpu_box) config_group.layout().addStretch() hlayout1 = QtWidgets.QHBoxLayout() hlayout1.addStretch() hlayout1.addWidget(self.setup_button) hlayout2 = QtWidgets.QHBoxLayout() hlayout2.addWidget(world_group) hlayout2.addWidget(config_group) self.setLayout(QtWidgets.QVBoxLayout()) self.layout().addLayout(hlayout1) self.layout().addLayout(hlayout2) self.layout().addWidget(self.launch_button)
def __init__(self, topic_name, attributes, array_index, publisher, parent, label_text=None): super(ValueWidget, self).__init__(topic_name, publisher, parent=parent) self._parent = parent self._attributes = attributes self._array_index = array_index self._text = ez_model.make_text(topic_name, attributes, array_index) self._horizontal_layout = QtWidgets.QHBoxLayout() if label_text is None: self._topic_label = QtWidgets.QLabel(self._text) else: self._topic_label = QtWidgets.QLabel(label_text) self.close_button = QtWidgets.QPushButton() self.close_button.setMaximumWidth(30) self.close_button.setIcon(self.style().standardIcon( QtWidgets.QStyle.SP_TitleBarCloseButton)) self.up_button = QtWidgets.QPushButton() self.up_button.setIcon(self.style().standardIcon( QtWidgets.QStyle.SP_ArrowUp)) self.up_button.setMaximumWidth(30) self.down_button = QtWidgets.QPushButton() self.down_button.setMaximumWidth(30) self.down_button.setIcon(self.style().standardIcon( QtWidgets.QStyle.SP_ArrowDown)) repeat_label = QtWidgets.QLabel('repeat') self._repeat_box = QtWidgets.QCheckBox() self._repeat_box.stateChanged.connect(self.repeat_changed) self._repeat_box.setChecked(publisher.is_repeating()) self._publish_button = QtWidgets.QPushButton('Publish') self._publish_button.clicked.connect(publisher.publish) self._horizontal_layout.addWidget(self._topic_label) self._horizontal_layout.addWidget(self.close_button) self._horizontal_layout.addWidget(self.up_button) self._horizontal_layout.addWidget(self.down_button) if self._array_index is not None: self.add_button = QtWidgets.QPushButton('+') self.add_button.setMaximumWidth(30) self._horizontal_layout.addWidget(self.add_button) else: self.add_button = None self.close_button.clicked.connect( lambda x: self._parent.close_slider(self)) self.up_button.clicked.connect( lambda x: self._parent.move_up_widget(self)) self.down_button.clicked.connect( lambda x: self._parent.move_down_widget(self)) self.setup_ui(self._text) self._horizontal_layout.addWidget(self._publish_button) self._horizontal_layout.addWidget(repeat_label) self._horizontal_layout.addWidget(self._repeat_box)
def __init__(self, plugin): super(ConfigDialog, self).__init__() self._plugin = plugin self._interval_spin_box = QtWidgets.QSpinBox() self._interval_spin_box.setMaximum(10000) self._interval_spin_box.setMinimum(1) self._interval_spin_box.setValue( publisher.TopicPublisherWithTimer.publish_interval) self._interval_spin_box.valueChanged.connect(self.update_interval) self._vertical_layout = QtWidgets.QVBoxLayout() self.configurable_checkbox = QtWidgets.QCheckBox() self.configurable_checkbox.setChecked(plugin.configurable) configurable_label = QtWidgets.QLabel('Configurable') self._configurable_horizontal_layout = QtWidgets.QHBoxLayout() self._configurable_horizontal_layout.addWidget(configurable_label) self._configurable_horizontal_layout.addWidget(self.configurable_checkbox) self._vertical_layout.addLayout(self._configurable_horizontal_layout) self._horizontal_layout = QtWidgets.QHBoxLayout() spin_label = QtWidgets.QLabel('Publish Interval for repeat [ms]') self._horizontal_layout.addWidget(spin_label) self._horizontal_layout.addWidget(self._interval_spin_box) self._vertical_layout.addLayout(self._horizontal_layout) save_button = QtWidgets.QPushButton(parent=self) save_button.setIcon( self.style().standardIcon(QtWidgets.QStyle.SP_DialogSaveButton)) save_button.setText('Save to file') save_button.clicked.connect(self.save_to_file) load_button = QtWidgets.QPushButton(parent=self) load_button.setIcon( self.style().standardIcon(QtWidgets.QStyle.SP_DialogOpenButton)) load_button.setText('Load from file') load_button.clicked.connect(self.load_from_file) self._vertical_layout.addWidget(save_button) self._vertical_layout.addWidget(load_button) self.setLayout(self._vertical_layout) self.adjustSize()
def __init__(self, guimgr, node, view): super(AwTransformFrame, self).__init__(guimgr, node, view) super(AwTransformFrame, self).setup_widget() self.set_title(frame_title(self.view, "Transform")) widget = QtWidgets.QWidget() widget.setLayout(QtWidgets.QHBoxLayout()) for idx, txt in enumerate(["Tx", "Ty", "Tz", "Rx", "Ry", "Rz"]): field = AwRealField(self.node.get_config(self.view.target[idx])) field.target = self.view.target[idx] field.value_updated.connect(self.apply) widget.layout().addWidget(QtWidgets.QLabel(txt + ":")) widget.layout().addWidget(field) self.add_widget(widget)
def __init__(self, client): super(AwControlPanel, self).__init__() self.__client = client self.__exec_button = QtWidgets.QPushButton("Exec") self.__term_button = QtWidgets.QPushButton("Term") self.__exec_button.clicked.connect(self.exec_config) self.__term_button.clicked.connect(self.term_config) self.__lpath = QtWidgets.QLabel() self.setLayout(QtWidgets.QVBoxLayout()) layout = QtWidgets.QHBoxLayout() layout.addWidget(QtWidgets.QLabel("Path: ")) layout.addWidget(self.__lpath) self.__lpath.setSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Preferred) self.layout().addLayout(layout) layout = QtWidgets.QHBoxLayout() layout.addWidget(self.__exec_button) layout.addWidget(self.__term_button) self.layout().addLayout(layout)
def __panel_setup(self, widget, spacer): footer_layout = QtWidgets.QHBoxLayout() footer_layout.setContentsMargins(2, 2, 2, 2) footer_layout.setSpacing(2) footer_layout.addStretch() widget.footer = QtWidgets.QWidget() widget.footer.setLayout(footer_layout) widget_layout = QtWidgets.QVBoxLayout() widget_layout.setContentsMargins(16, 16, 16, 16) widget_layout.setSpacing(16) if not spacer: widget_layout.addStretch() else: widget_layout.addWidget(spacer) widget_layout.addWidget(widget.footer) widget.setLayout(widget_layout)
def __setup_widget(self): self.window().setWindowTitle(self.__class__.__name__) # Panel Footer layout = QtWidgets.QHBoxLayout() layout.setContentsMargins(2, 2, 2, 2) layout.setSpacing(2) layout.addStretch() self.footer = QtWidgets.QWidget() self.footer.setLayout(layout) # Panel Layout layout = QtWidgets.QVBoxLayout() layout.setContentsMargins(16, 16, 16, 16) layout.setSpacing(16) layout.addStretch() layout.addWidget(self.footer) self.setLayout(layout)
def show_select_window(self): # window window = QtWidgets.QMainWindow(self) window.setCentralWidget(QtWidgets.QWidget()) window.setAttribute(QtCore.Qt.WA_DeleteOnClose, True) window.setWindowModality(QtCore.Qt.ApplicationModal) window.setGeometry(self.window().geometry()) # widget window.setWindowTitle("Create Node") widget = window.centralWidget() widget.setLayout(QtWidgets.QVBoxLayout()) # plugin select pname_select = QtWidgets.QListWidget() for pname in self.rule.plugins: pname_select.addItem(pname) widget.layout().addWidget(QtWidgets.QLabel("Node Type")) widget.layout().addWidget(pname_select) # footer error_label = QtWidgets.QLabel() error_label.setSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Preferred) cancel_button = QtWidgets.QPushButton("Cancel") select_button = QtWidgets.QPushButton("Select") cancel_button.clicked.connect(window.close) select_button.clicked.connect(self.onselected) footer = QtWidgets.QHBoxLayout() footer.addWidget(error_label) footer.addWidget(cancel_button) footer.addWidget(select_button) widget.layout().addLayout(footer) self.ui_window = window self.ui_error = error_label self.ui_pname = pname_select window.show()
def setupUi(self, MainWindow): ############################################################################################### self.lock = Lock() self.talker = Talker('gui') rospy.Subscriber('bbBackup',bbBackup,self.backupFunction) rospy.Subscriber('clicked_point',PointStamped,self.clickedPintRviz) ############################################################################################### MainWindow.setObjectName("MainWindow") MainWindow.resize(560, 440) self.centralwidget = QtWidgets.QWidget(MainWindow) self.centralwidget.setObjectName("centralwidget") self.gBnewTask = QtWidgets.QGroupBox(self.centralwidget) self.gBnewTask.setGeometry(QtCore.QRect(10, 60, 541, 291)) self.gBnewTask.setObjectName("gBnewTask") self.gBc = QtWidgets.QGroupBox(self.gBnewTask) self.gBc.setEnabled(False) self.gBc.setGeometry(QtCore.QRect(420, 80, 111, 151)) self.gBc.setObjectName("gBc") self.label_29 = QtWidgets.QLabel(self.gBc) self.label_29.setGeometry(QtCore.QRect(10, 30, 16, 21)) self.label_29.setObjectName("label_29") self.label_30 = QtWidgets.QLabel(self.gBc) self.label_30.setGeometry(QtCore.QRect(10, 90, 21, 21)) self.label_30.setObjectName("label_30") self.label_31 = QtWidgets.QLabel(self.gBc) self.label_31.setGeometry(QtCore.QRect(10, 60, 16, 21)) self.label_31.setObjectName("label_31") self.cx = QtWidgets.QDoubleSpinBox(self.gBc) self.cx.setGeometry(QtCore.QRect(30, 30, 69, 26)) self.cx.setObjectName("cx") self.cx.setRange(-100.0,100.0) self.cy = QtWidgets.QDoubleSpinBox(self.gBc) self.cy.setGeometry(QtCore.QRect(30, 60, 69, 26)) self.cy.setObjectName("cy") self.cy.setRange(-100.0,100.0) self.cz = QtWidgets.QDoubleSpinBox(self.gBc) self.cz.setGeometry(QtCore.QRect(30, 90, 69, 26)) self.cz.setObjectName("cz") self.cz.setRange(-100.0,100.0) self.cw = QtWidgets.QDoubleSpinBox(self.gBc) self.cw.setGeometry(QtCore.QRect(30, 120, 69, 26)) self.cw.setObjectName("cw") self.cw.setRange(-100.0,100.0) self.label_39 = QtWidgets.QLabel(self.gBc) self.label_39.setGeometry(QtCore.QRect(10, 120, 21, 21)) self.label_39.setObjectName("label_39") self.gBb = QtWidgets.QGroupBox(self.gBnewTask) self.gBb.setEnabled(False) self.gBb.setGeometry(QtCore.QRect(300, 80, 111, 151)) self.gBb.setObjectName("gBb") self.label_40 = QtWidgets.QLabel(self.gBb) self.label_40.setGeometry(QtCore.QRect(10, 30, 16, 21)) self.label_40.setObjectName("label_40") self.label_41 = QtWidgets.QLabel(self.gBb) self.label_41.setGeometry(QtCore.QRect(10, 90, 21, 21)) self.label_41.setObjectName("label_41") self.label_42 = QtWidgets.QLabel(self.gBb) self.label_42.setGeometry(QtCore.QRect(10, 60, 16, 21)) self.label_42.setObjectName("label_42") self.bx = QtWidgets.QDoubleSpinBox(self.gBb) self.bx.setGeometry(QtCore.QRect(30, 30, 69, 26)) self.bx.setObjectName("bx") self.bx.setRange(-100.0,100.0) self.by = QtWidgets.QDoubleSpinBox(self.gBb) self.by.setGeometry(QtCore.QRect(30, 60, 69, 26)) self.by.setObjectName("by") self.by.setRange(-100.0,100.0) self.bz = QtWidgets.QDoubleSpinBox(self.gBb) self.bz.setGeometry(QtCore.QRect(30, 90, 69, 26)) self.bz.setObjectName("bz") self.bz.setRange(-100.0,100.0) self.bw = QtWidgets.QDoubleSpinBox(self.gBb) self.bw.setGeometry(QtCore.QRect(30, 120, 69, 26)) self.bw.setObjectName("bw") self.bw.setRange(-100.0,100.0) self.label_43 = QtWidgets.QLabel(self.gBb) self.label_43.setGeometry(QtCore.QRect(10, 120, 21, 21)) self.label_43.setObjectName("label_43") self.gBtaskType = QtWidgets.QGroupBox(self.gBnewTask) self.gBtaskType.setGeometry(QtCore.QRect(10, 80, 161, 151)) self.gBtaskType.setObjectName("gBtaskType") self.radioButton = QtWidgets.QRadioButton(self.gBtaskType) self.radioButton.setEnabled(True) self.radioButton.setGeometry(QtCore.QRect(10, 30, 131, 23)) self.radioButton.setChecked(True) self.radioButton.setObjectName("radioButton") self.radioButton_2 = QtWidgets.QRadioButton(self.gBtaskType) self.radioButton_2.setGeometry(QtCore.QRect(10, 60, 101, 23)) self.radioButton_2.setObjectName("radioButton_2") self.radioButton_3 = QtWidgets.QRadioButton(self.gBtaskType) self.radioButton_3.setGeometry(QtCore.QRect(10, 90, 131, 23)) self.radioButton_3.setObjectName("radioButton_3") self.radioButton_4 = QtWidgets.QRadioButton(self.gBtaskType) self.radioButton_4.setGeometry(QtCore.QRect(10, 120, 141, 23)) self.radioButton_4.setObjectName("radioButton_4") self.gBa = QtWidgets.QGroupBox(self.gBnewTask) self.gBa.setEnabled(True) self.gBa.setGeometry(QtCore.QRect(180, 80, 111, 151)) self.gBa.setObjectName("gBa") self.label_25 = QtWidgets.QLabel(self.gBa) self.label_25.setGeometry(QtCore.QRect(10, 30, 16, 21)) self.label_25.setObjectName("label_25") self.label_26 = QtWidgets.QLabel(self.gBa) self.label_26.setGeometry(QtCore.QRect(10, 90, 21, 21)) self.label_26.setObjectName("label_26") self.label_27 = QtWidgets.QLabel(self.gBa) self.label_27.setGeometry(QtCore.QRect(10, 60, 16, 21)) self.label_27.setObjectName("label_27") self.ax = QtWidgets.QDoubleSpinBox(self.gBa) self.ax.setGeometry(QtCore.QRect(30, 30, 69, 26)) self.ax.setObjectName("ax") self.ax.setRange(-100.0,100.0) self.ay = QtWidgets.QDoubleSpinBox(self.gBa) self.ay.setGeometry(QtCore.QRect(30, 60, 69, 26)) self.ay.setObjectName("ay") self.ay.setRange(-100.0,100.0) self.az = QtWidgets.QDoubleSpinBox(self.gBa) self.az.setGeometry(QtCore.QRect(30, 90, 69, 26)) self.az.setObjectName("az") self.az.setRange(-100.0,100.0) self.aw = QtWidgets.QDoubleSpinBox(self.gBa) self.aw.setGeometry(QtCore.QRect(30, 120, 69, 26)) self.aw.setObjectName("aw") self.aw.setRange(-100.0,100.0) self.label_28 = QtWidgets.QLabel(self.gBa) self.label_28.setGeometry(QtCore.QRect(10, 120, 21, 21)) self.label_28.setObjectName("label_28") self.btnAddTask = QtWidgets.QPushButton(self.gBnewTask) self.btnAddTask.setEnabled(True) self.btnAddTask.setGeometry(QtCore.QRect(10, 240, 521, 31)) self.btnAddTask.setObjectName("btnAddTask") self.widget = QtWidgets.QWidget(self.gBnewTask) self.widget.setGeometry(QtCore.QRect(10, 30, 521, 28)) self.widget.setObjectName("widget") self.horizontalLayout = QtWidgets.QHBoxLayout(self.widget) self.horizontalLayout.setContentsMargins(0, 0, 0, 0) self.horizontalLayout.setObjectName("horizontalLayout") self.label_3 = QtWidgets.QLabel(self.widget) self.label_3.setObjectName("label_3") self.horizontalLayout.addWidget(self.label_3) self.sBtaskid = QtWidgets.QSpinBox(self.widget) self.sBtaskid.setObjectName("sBtaskid") self.horizontalLayout.addWidget(self.sBtaskid) self.label_4 = QtWidgets.QLabel(self.widget) self.label_4.setObjectName("label_4") self.horizontalLayout.addWidget(self.label_4) self.sbtaskPriority = QtWidgets.QSpinBox(self.widget) self.sbtaskPriority.setObjectName("sbtaskPriority") self.horizontalLayout.addWidget(self.sbtaskPriority) self.label_5 = QtWidgets.QLabel(self.widget) self.label_5.setObjectName("label_5") self.horizontalLayout.addWidget(self.label_5) self.sbtaskPayload = QtWidgets.QSpinBox(self.widget) self.sbtaskPayload.setObjectName("sbtaskPayload") self.horizontalLayout.addWidget(self.sbtaskPayload) self.gBrobotState = QtWidgets.QGroupBox(self.centralwidget) self.gBrobotState.setGeometry(QtCore.QRect(10, 360, 541, 71)) self.gBrobotState.setObjectName("gBrobotState") self.sBrobotId = QtWidgets.QSpinBox(self.gBrobotState) self.sBrobotId.setGeometry(QtCore.QRect(80, 30, 48, 31)) self.sBrobotId.setObjectName("sBrobotId") self.radioButton_5 = QtWidgets.QRadioButton(self.gBrobotState) self.radioButton_5.setGeometry(QtCore.QRect(140, 32, 61, 31)) self.radioButton_5.setChecked(True) self.radioButton_5.setObjectName("radioButton_5") self.radioButton_6 = QtWidgets.QRadioButton(self.gBrobotState) self.radioButton_6.setGeometry(QtCore.QRect(280, 32, 71, 31)) self.radioButton_6.setObjectName("radioButton_6") self.radioButton_7 = QtWidgets.QRadioButton(self.gBrobotState) self.radioButton_7.setGeometry(QtCore.QRect(210, 32, 51, 31)) self.radioButton_7.setObjectName("radioButton_7") self.btnsetRobotState = QtWidgets.QPushButton(self.gBrobotState) self.btnsetRobotState.setEnabled(True) self.btnsetRobotState.setGeometry(QtCore.QRect(380, 30, 151, 31)) self.btnsetRobotState.setObjectName("btnsetRobotState") self.label_32 = QtWidgets.QLabel(self.gBrobotState) self.label_32.setGeometry(QtCore.QRect(10, 30, 81, 31)) self.label_32.setObjectName("label_32") self.label = QtWidgets.QLabel(self.centralwidget) self.label.setGeometry(QtCore.QRect(10, 20, 81, 17)) self.label.setObjectName("label") self.label_2 = QtWidgets.QLabel(self.centralwidget) self.label_2.setGeometry(QtCore.QRect(300, 20, 141, 17)) self.label_2.setObjectName("label_2") self.lblblackBoard = QtWidgets.QLabel(self.centralwidget) self.lblblackBoard.setGeometry(QtCore.QRect(100, 20, 141, 17)) font = QtGui.QFont() font.setItalic(True) self.lblblackBoard.setFont(font) self.lblblackBoard.setObjectName("lblblackBoard") self.lblbackupBlackboard = QtWidgets.QLabel(self.centralwidget) self.lblbackupBlackboard.setGeometry(QtCore.QRect(450, 20, 91, 17)) font = QtGui.QFont() font.setItalic(True) self.lblbackupBlackboard.setFont(font) self.lblbackupBlackboard.setObjectName("lblbackupBlackboard") MainWindow.setCentralWidget(self.centralwidget) self.retranslateUi(MainWindow) QtCore.QMetaObject.connectSlotsByName(MainWindow) self.currentpint = 1
def create_frame_header_hlayout(self): layout = QtWidgets.QHBoxLayout() layout.setSpacing(0) layout.setContentsMargins(5, 2, 2, 2) return layout
def init_buttons(self): added_node_labels = [] if self.tree != None: for node in self.tree.nodes: if node.label in added_node_labels: continue added_node_labels.append(node.label) def get_publish_function(widget, button, other_buttons, node, message_type, message_data): pub = rospy.Publisher(node.get_subscriber_name(), message_type, queue_size=1) class IDContainer: def __init__(self): self.id = 0 id_container = IDContainer() def active_callback(msg): id_container.id = msg.id if isinstance(message_type(), Status): print(node.get_publisher_name()) sub = rospy.Subscriber(node.get_publisher_name(), Active, active_callback) def add_publish_function(): def publish_function(): if message_data != 'NO MESSAGE': msg = message_type() if isinstance(msg, Bool): msg.data = message_data elif isinstance(msg, Status): msg.status = message_data msg.id = id_container.id pub.publish(msg) #print(node.label + ' publishing to ' + node.get_subscriber_name() + ' ' + str(message_data)) self.functions_mutex.acquire() self.functions[node.label] = publish_function self.functions_mutex.release() if message_data == Status.SUCCESS or message_data == True: widget.setStyleSheet("background-color: rgb(0, 255, 0);") elif message_data == Status.RUNNING: widget.setStyleSheet("background-color: rgb(0, 0, 255);") elif message_data == Status.FAILURE or message_data == False: widget.setStyleSheet("background-color: rgb(255, 0, 0);") elif message_data == 'NO MESSAGE': widget.setStyleSheet("background-color: rgb(255, 255, 255);") button.setStyleSheet("background-color: rgb(0, 255, 0);") for b in other_buttons: b.setStyleSheet("background-color: rgb(255, 0, 0);") return add_publish_function if isinstance(node, bt.Action): action_widget = qt.QWidget() action_layout = qt.QHBoxLayout() action_widget.setLayout(action_layout) self.action_layout.addWidget(action_widget) label = qt.QLabel() label.setText(node.label) action_layout.addWidget(label) success_button = qt.QPushButton('SUCCESS') success_button.setStyleSheet("background-color: rgb(255, 0, 0);") action_layout.addWidget(success_button) running_button = qt.QPushButton('RUNNING') running_button.setStyleSheet("background-color: rgb(255, 0, 0);") action_layout.addWidget(running_button) failure_button = qt.QPushButton('FAILURE') failure_button.setStyleSheet("background-color: rgb(255, 0, 0);") action_layout.addWidget(failure_button) no_message_button = qt.QPushButton('NO MESSAGE') no_message_button.setStyleSheet("background-color: rgb(0, 255, 0);") action_layout.addWidget(no_message_button) success_button.clicked.connect(get_publish_function(action_widget, success_button, [running_button, failure_button, no_message_button], node, Status, Status.SUCCESS)) running_button.clicked.connect(get_publish_function(action_widget, running_button, [success_button, failure_button, no_message_button], node, Status, Status.RUNNING)) failure_button.clicked.connect(get_publish_function(action_widget, failure_button, [success_button, running_button, no_message_button], node, Status, Status.FAILURE)) no_message_button.clicked.connect(get_publish_function(action_widget, no_message_button, [success_button, running_button, failure_button], node, Status, 'NO MESSAGE')) elif isinstance(node, bt.Condition): condition_widget = qt.QWidget() condition_layout = qt.QHBoxLayout() condition_widget.setLayout(condition_layout) self.condition_layout.addWidget(condition_widget) label = qt.QLabel() label.setText(node.label) condition_layout.addWidget(label) success_button = qt.QPushButton('SUCCESS') success_button.setStyleSheet("background-color: rgb(255, 0, 0);") condition_layout.addWidget(success_button) failure_button = qt.QPushButton('FAILURE') failure_button.setStyleSheet("background-color: rgb(255, 0, 0);") condition_layout.addWidget(failure_button) no_message_button = qt.QPushButton('NO MESSAGE') no_message_button.setStyleSheet("background-color: rgb(0, 255, 0);") condition_layout.addWidget(no_message_button) success_button.clicked.connect(get_publish_function(condition_widget, success_button, [failure_button, no_message_button], node, Bool, True)) failure_button.clicked.connect(get_publish_function(condition_widget, failure_button, [success_button, no_message_button], node, Bool, False)) no_message_button.clicked.connect(get_publish_function(condition_widget, no_message_button, [success_button, failure_button], node, Bool, 'NO MESSAGE'))
def __init__(self, context): super(BehaviorTreePlugin, self).__init__(context) self.setObjectName('BehaviorTreePlugin') self.tree = None self.initialized_buttons = False self.prev_graphviz = '' self.behavior_tree_graphviz_sub = rospy.Subscriber('behavior_tree_graphviz', String, self.behavior_tree_graphviz_callback) self.timer = rospy.Timer(rospy.Duration(0.1), self.timer_callback) self.functions_mutex = Lock() self.functions = {} self.last_graphviz_string = '' self.widget = QWidget() self.vbox = qt.QVBoxLayout() self.widget.setLayout(self.vbox) context.add_widget(self.widget) #self.widget.setStyleSheet('QWidget{margin-left:-1px;}') self.top_widget = qt.QWidget() self.top_layout = qt.QVBoxLayout() self.top_widget.setLayout(self.top_layout) self.graph_widget = qt.QWidget() self.graph_layout = qt.QVBoxLayout() self.graph_widget.setLayout(self.graph_layout) self.image_label = qt.QLabel('asdfadsf') #self.graph_layout.addWidget(self.image_label) self.xdot_widget = DotWidget() self.graph_layout.addWidget(self.xdot_widget) self.top_layout.addWidget(self.graph_widget) self.graph_widget.setStyleSheet("background-color: rgb(255, 255, 255);") self.config_widget = qt.QWidget() self.config_widget.setStyleSheet('QWidget{margin-left:-1px;}') self.config_layout = qt.QHBoxLayout() self.config_widget.setLayout(self.config_layout) self.config_widget.setFixedHeight(50) self.config_button = qt.QPushButton('Open Config...') self.config_button.clicked.connect(self.select_config_file) self.config_layout.addWidget(self.config_button) self.tree_label = qt.QLabel('tree filename: ') self.config_layout.addWidget(self.tree_label) self.debug_checkbox = qt.QCheckBox('Debug Mode') self.config_layout.addWidget(self.debug_checkbox) self.debug_checkbox.stateChanged.connect(self.debug_mode_changed) #self.config_widget.setStyleSheet("background-color: rgb(255, 0, 0);") self.top_layout.addWidget(self.config_widget) #self.vbox.addWidget(self.top_widget) self.button_container_widget = qt.QWidget() self.button_container_layout = qt.QVBoxLayout() self.button_container_widget.setLayout(self.button_container_layout) #self.vbox.addWidget(self.button_container_widget) self.button_widget = qt.QWidget() self.button_layout = qt.QHBoxLayout() self.button_widget.setLayout(self.button_layout) #self.button_widget.setStyleSheet("background-color: rgb(0, 0, 255);") self.condition_widget = qt.QWidget() self.condition_layout = qt.QVBoxLayout() self.condition_widget.setLayout(self.condition_layout) self.button_layout.addWidget(self.condition_widget) self.condition_label = qt.QLabel() self.condition_label.setText('Conditions') self.condition_label.setAlignment(Qt.AlignCenter) self.condition_label.setFont(gui.QFont("SansSerif", 18, gui.QFont.Bold)) self.condition_layout.addWidget(self.condition_label) self.action_widget = qt.QWidget() self.action_layout = qt.QVBoxLayout() self.action_widget.setLayout(self.action_layout) self.button_layout.addWidget(self.action_widget) self.action_label = qt.QLabel() self.action_label.setText('Actions') self.action_label.setAlignment(Qt.AlignCenter) self.action_label.setFont(gui.QFont("SansSerif", 18, gui.QFont.Bold)) self.action_layout.addWidget(self.action_label) self.button_scroll_area = qt.QScrollArea() self.button_scroll_area.setWidget(self.button_widget) #self.button_scroll_area.setFixedHeight(200) #self.button_container_widget.setFixedHeight(200) self.button_container_layout.addWidget(self.button_scroll_area) self.button_widget.setMinimumWidth(self.button_scroll_area.sizeHint().width()) self.button_scroll_area.setWidgetResizable(True) self.horizontal_splitter = qt.QSplitter(core.Qt.Vertical) self.horizontal_splitter.addWidget(self.top_widget) self.horizontal_splitter.addWidget(self.button_container_widget) self.vbox.addWidget(self.horizontal_splitter) self.button_container_widget.hide()
def __init__(self, input_id): super(InputWidget, self).__init__() self._id = input_id self.setLayout(QtWidgets.QHBoxLayout()) self._id_label = QtWidgets.QLabel("Input " + str(self._id)) self.layout().addWidget(self._id_label) # ---- Input port input ---- self._input_port_input = QtWidgets.QLineEdit() self.port_validator = QtGui.QRegExpValidator(QtCore.QRegExp("[a-z]+[0-9]+")) self._input_port_input.setValidator(self.port_validator) self.layout().addWidget(self._input_port_input) self._input_port_input.setText(str(rospy.get_param(self.get_param_base() + "input", "js" + str(self._id)))) self._input_port_input.textChanged.connect(self.change_input_port) # ---- /Input selector ---- # ---- Type selector ---- self._type_selector = QtWidgets.QComboBox() self.layout().addWidget(self._type_selector) self._type_selector.insertItem(0, "xbox ewoud") self._type_selector.insertItem(0, "xbox vision") self._type_selector.insertItem(0, "playstation") self._type_selector.insertItem(0, "gioteck") currentJoyType = rospy.get_param(self.get_param_base() + "joyType", "gioteck"); self._type_selector.setCurrentIndex(self._type_selector.findText(currentJoyType)) self._type_selector.currentIndexChanged.connect(self.change_input_type) # ---- /Type selector ---- self._robot_id_label = QtWidgets.QLabel("Robot id") self.layout().addWidget(self._robot_id_label) # --- Robot id input ---- self._robot_id_input = QtWidgets.QLineEdit() self.int_validator = QtGui.QRegExpValidator(QtCore.QRegExp("[0-9]+")) self._robot_id_input.setValidator(self.int_validator) self.layout().addWidget(self._robot_id_input) self._robot_id_input.setText(str(rospy.get_param(self.get_param_base() + "robot", int(self._id)))) self._robot_id_input.textChanged.connect(self.change_bot_id) # --- /Robot id input ---- # --- Mode selector ---- self._mode_selector = QtWidgets.QComboBox() self.layout().addWidget(self._mode_selector) self._mode_selector.insertItem(0, "our keeper") self._mode_selector.insertItem(0, "normal") currentMode = rospy.get_param(self.get_param_base() + "mode", "normal"); self._mode_selector.setCurrentIndex(self._mode_selector.findText(currentMode)) self._mode_selector.currentIndexChanged.connect(self.change_input_mode)
def setupButtons(self, yaml_file): """ Parse yaml file and setup Buttons. Format of the yaml file should be: - name: 'button name' (required) image: 'path to image for icon' (optional) image_size: 'width and height of icon' (optional) command: 'command' (required) column: 'column index' (optional, defaults to 0) """ self.buttons = [] with open(yaml_file) as f: yaml_data = yaml.load(f) # lookup colum direction direction = 'vertical' for d in yaml_data: if d.has_key('direction'): if d['direction'] == 'horizontal': direction = 'horizontal' else: # d['direction'] == 'vertical': direction = 'vertical' yaml_data.remove(d) break # lookup column num column_indices = [d['column'] for d in yaml_data] max_column_index = max(*column_indices) if direction == 'vertical': self.layout = QtWidgets.QHBoxLayout() self.layout_boxes = [QtWidgets.QVBoxLayout() for i in range(max_column_index + 1)] else: # direction == 'horizontal' self.layout = QtWidgets.QVBoxLayout() self.layout_boxes = [QtWidgets.QHBoxLayout() for i in range(max_column_index + 1)] self.button_groups = [QtWidgets.QGroupBox() for i in range(max_column_index + 1)] for button_data in yaml_data: # check if all the field is available if not button_data.has_key("name"): self.showError("name field is missed in yaml") raise Exception("name field is missed in yaml") if not button_data.has_key("command"): self.showError("command field is missed in yaml") raise Exception("command field is missed in yaml") if self.button_type == "push": button = QtWidgets.QToolButton() else: # self.button_type == "Radio": button = QtWidgets.QRadioButton() button.setSizePolicy(QSizePolicy(QSizePolicy.Preferred, QSizePolicy.Preferred)) if button_data.has_key("image"): image_file = get_filename(button_data["image"])[len("file://"):] if os.path.exists(image_file): icon = QtGui.QIcon(image_file) button.setIcon(icon) if button_data.has_key("image_size"): button.setIconSize(QSize(button_data["image_size"][0], button_data["image_size"][1])) else: button.setIconSize(QSize(100, 100)) if button_data.has_key("name"): name = button_data['name'] button.setText(name) button.clicked.connect(self.buttonCallback(button_data['command'])) if self.button_type == "push": button.setToolButtonStyle(QtCore.Qt.ToolButtonTextUnderIcon) else: # self.button_type == "Radio": if button_data.has_key("default_value") and button_data['default_value']: button.setChecked(True) self.layout_boxes[button_data['column']].addWidget(button) self.buttons.append(button) for i in range(len(self.button_groups)): self.button_groups[i].setLayout(self.layout_boxes[i]) for group in self.button_groups: self.layout.addWidget(group) self.setLayout(self.layout)