Beispiel #1
0
 def updateView(self):
     if self.selected:
         pixmap = QtGui.QPixmap(self.selectedIconPath)
     else:
         pixmap = QtGui.QPixmap(self.notSelectedIconPath)
     self.icon.setPixmap(
         pixmap.scaledToWidth(self.actionIconWidth,
                              QtCore.Qt.SmoothTransformation))
Beispiel #2
0
def main():
    from python_qt_binding import QtGui, QtCore, QT_BINDING
    import hyperspyui.info
    from hyperspyui.singleapplication import get_app
    from hyperspyui.settings import Settings
    from hyperspyui.util import dummy_context_manager

    # Need to set early to make QSettings accessible
    QtCore.QCoreApplication.setApplicationName("HyperSpyUI")
    QtCore.QCoreApplication.setOrganizationName("Hyperspy")
    QtCore.QCoreApplication.setApplicationVersion(hyperspyui.info.version)

    # First, clear all default settings!
    # TODO: This will cause a concurrency issue with multiple launch
    Settings.clear_defaults()
    # Setup default for single/multi-instance
    settings = Settings(group="General")
    settings.set_default('allow_multiple_instances', False)
    if settings['allow_multiple_instances', bool]:
        # Using multiple instances, get a new application
        app = QtGui.QApplication(sys.argv)
    else:
        # Make sure we only have a single instance
        app = get_app('hyperspyui')

    log_file = _get_logfile()
    if log_file:
        sys.stdout = sys.stderr = log_file
    else:
        log_file = dummy_context_manager()

    with log_file:
        # Create and display the splash screen
        splash_pix = QtGui.QPixmap(
            os.path.dirname(__file__) + './images/splash.png')
        splash = QtGui.QSplashScreen(splash_pix,
                                     QtCore.Qt.WindowStaysOnTopHint)
        splash.setMask(splash_pix.mask())
        splash.show()
        app.processEvents()

        # Need to have import here, as it can take some time, so should happen
        # after displaying splash
        from hyperspyui.mainwindow import MainWindow

        form = MainWindow()
        if not settings['allow_multiple_instances', bool]:
            if QT_BINDING == 'pyqt':
                app.messageAvailable.connect(form.handleSecondInstance)
            elif QT_BINDING == 'pyside':
                app.messageReceived.connect(form.handleSecondInstance)
        form.showMaximized()

        splash.finish(form)
        form.load_complete.emit()
        # Ensure logging is OK
        import hyperspy.api as hs
        hs.set_log_level(LOGLEVEL)

        app.exec_()
 def updateDescription(self, index, cfg, name, displayed_name, robot_type,
                       description, images):
     '''
 Sets the values of an existing item to the given items only if the current 
 value is empty.
 '''
     if index < len(self._data):
         obj = self._data[index]
         if not cfg in obj['cfgs']:
             obj['cfgs'].append(cfg)
         if not obj['name']:
             obj['name'] = name
         if not obj['displayed_name']:
             obj['displayed_name'] = displayed_name
         if not obj['type']:
             obj['type'] = robot_type
         if not obj['description']:
             obj['description'] = resolve_paths(description)
         if not obj['images']:
             for image_path in images:
                 img = resolve_paths(image_path)
                 if img and img[0] != os.path.sep:
                     img = os.path.join(nm.settings().PACKAGE_DIR,
                                        image_path)
                 if os.path.isfile(img):
                     obj['images'].append(QtGui.QPixmap(img))
Beispiel #4
0
def load_cursor(filename, hotX=-1, hotY=-1):
    renderer = QtSvg.QSvgRenderer(filename)
    pm = QtGui.QPixmap(16, 16)
    pm.fill(QtCore.Qt.transparent)
    painter = QtGui.QPainter(pm)
    renderer.render(painter)
    del painter, renderer
    return QtGui.QCursor(pm, hotX, hotY)
Beispiel #5
0
 def image_callback(self, data):
     """Image callback"""
     #rospy.loginfo(rospy.get_caller_id() + "I heard %s", data.data) 
     rgb_image = CvBridge().imgmsg_to_cv2(data, desired_encoding="rgb8")
     height, width, channel = rgb_image.shape
     bytesPerLine = 3 * width
     qImg = QtGui.QImage(rgb_image.data, width, height, bytesPerLine, QtGui.QImage.Format_RGB888)
     self.videoframe.setPixmap(QtGui.QPixmap(qImg))
Beispiel #6
0
    def __init__(self, guimgr):
        super(AwQuickStartPanel, self).__init__()
        self.guimgr = guimgr
        self.frames = {"root/" + name: None for name in ["map", "vehicle", "sensing", "visualization"]}
        self.awlogo = QtWidgets.QLabel()

        pixmap = QtGui.QPixmap(myutils.package("resources/autoware_logo.png"))
        self.awlogo.setPixmap(pixmap)
        self.awlogo.setAlignment(QtCore.Qt.AlignCenter)
        self.awlogo.setSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Expanding)
Beispiel #7
0
 def setImage(self, image_string, x, y, label, l_bearing, scale=True):
     if scale == False:
         l_bearing -= 90
     p_map = QtGui.QPixmap(image_string)
     p_map = p_map.scaled(x, y, QtCore.Qt.KeepAspectRatio)
     transform = QtGui.QTransform().rotate(l_bearing)
     p_map = p_map.transformed(transform, QtCore.Qt.SmoothTransformation)
     QtWidgets.QLabel.setPixmap(label , p_map)
     label.setAlignment(QtCore.Qt.AlignCenter)
     if scale == True:
         label.setScaledContents(True)
Beispiel #8
0
    def __init__(self,
                 items=list(),
                 buttons=QtGui.QDialogButtonBox.Cancel
                 | QtGui.QDialogButtonBox.Ok,
                 exclusive=False,
                 preselect_all=False,
                 title='',
                 description='',
                 icon='',
                 parent=None,
                 select_if_single=True):
        '''
    Creates an input dialog.
    @param items: a list with strings
    @type items: C{list()}
    '''
        QtGui.QDialog.__init__(self, parent=parent)
        self.setObjectName(' - '.join(['SelectDialog', str(items)]))

        self.verticalLayout = QtGui.QVBoxLayout(self)
        self.verticalLayout.setObjectName("verticalLayout")
        self.verticalLayout.setContentsMargins(1, 1, 1, 1)

        # add filter row
        self.filter_frame = QtGui.QFrame(self)
        filterLayout = QtGui.QHBoxLayout(self.filter_frame)
        filterLayout.setContentsMargins(1, 1, 1, 1)
        label = QtGui.QLabel("Filter:", self.filter_frame)
        self.filter_field = QtGui.QLineEdit(self.filter_frame)
        filterLayout.addWidget(label)
        filterLayout.addWidget(self.filter_field)
        self.filter_field.textChanged.connect(self._on_filter_changed)
        self.verticalLayout.addWidget(self.filter_frame)

        if description:
            self.description_frame = QtGui.QFrame(self)
            descriptionLayout = QtGui.QHBoxLayout(self.description_frame)
            #      descriptionLayout.setContentsMargins(1, 1, 1, 1)
            if icon:
                self.icon_label = QtGui.QLabel(self.description_frame)
                self.icon_label.setSizePolicy(QtGui.QSizePolicy.Fixed,
                                              QtGui.QSizePolicy.Fixed)
                self.icon_label.setPixmap(
                    QtGui.QPixmap(icon).scaled(30, 30,
                                               QtCore.Qt.KeepAspectRatio))
                descriptionLayout.addWidget(self.icon_label)
            self.description_label = QtGui.QLabel(self.description_frame)
            self.description_label.setWordWrap(True)
            self.description_label.setText(description)
            descriptionLayout.addWidget(self.description_label)
            self.verticalLayout.addWidget(self.description_frame)

        # create area for the parameter
        self.scrollArea = scrollArea = QtGui.QScrollArea(self)
        self.scrollArea.setFocusPolicy(QtCore.Qt.NoFocus)
        scrollArea.setObjectName("scrollArea")
        scrollArea.setWidgetResizable(True)
        self.content = MainBox(self)
        scrollArea.setWidget(self.content)
        self.verticalLayout.addWidget(scrollArea)

        # add select all option
        if not exclusive:
            self._ignore_next_toggle = False
            options = QtGui.QWidget(self)
            hLayout = QtGui.QHBoxLayout(options)
            hLayout.setContentsMargins(1, 1, 1, 1)
            self.select_all_checkbox = QtGui.QCheckBox('all')
            self.select_all_checkbox.setTristate(True)
            self.select_all_checkbox.stateChanged.connect(
                self._on_select_all_checkbox_stateChanged)
            hLayout.addWidget(self.select_all_checkbox)
            self.content.toggled.connect(self._on_main_toggle)
            # add spacer
            spacerItem = QtGui.QSpacerItem(515, 20,
                                           QtGui.QSizePolicy.Expanding,
                                           QtGui.QSizePolicy.Minimum)
            hLayout.addItem(spacerItem)
            self.verticalLayout.addWidget(options)

        # create buttons
        self.buttonBox = QtGui.QDialogButtonBox(self)
        self.buttonBox.setObjectName("buttonBox")
        self.buttonBox.setOrientation(QtCore.Qt.Horizontal)
        self.buttonBox.setStandardButtons(buttons)
        self.buttonBox.accepted.connect(self.accept)
        self.buttonBox.rejected.connect(self.reject)
        self.verticalLayout.addWidget(self.buttonBox)

        # set the input fields
        if items:
            self.content.createFieldsFromValues(items, exclusive)
            if (select_if_single and len(items) == 1) or preselect_all:
                self.select_all_checkbox.setCheckState(QtCore.Qt.Checked)

        if not items or len(items) < 11:
            self.filter_frame.setVisible(False)
 def __init__(self, *args, **kwargs):
     QtGui.QLabel.__init__(self)
     self._pixmap = QtGui.QPixmap(self.pixmap())
Beispiel #10
0
    def __init__(self, context):
        """Loads up the master.ui GUI file and adds some additional widgets that cannot be added beforehand. Also sets some necessary variables."""
        super(HardwareUI, self).__init__(context)
        self._widget = QMainWindow()

        rp = rospkg.RosPack()
        ui_file = os.path.join(rp.get_path('bitbots_hardware_rqt'), 'resource',
                               'master.ui')
        loadUi(ui_file, self._widget, {})

        self.current_tab = 0
        self.current_outer_tab = 0

        self.historydict = []
        self.colorlist = [
        ]  #Holds information about the graph colors, so we can distinguish between the different motors
        self.motornames = [
            'HeadPan', 'HeadTilt', 'LAnklePitch', 'LAnkleRoll', 'LElbow',
            'LHipPitch', 'LHipRoll', 'LHipYaw', 'LKnee', 'LShoulderPitch',
            'LShoulderRoll', 'RAnklePitch', 'RAnkleRoll', 'RElbow',
            'RHipPitch', 'RHipRoll', 'RHipYaw', 'RKnee', 'RShoulderPitch',
            'RShoulderRoll'
        ]  #We need the motor names in alphabetical order for some gui elements
        for i in range(0, 20):
            self.colorlist.append(
                (random.randrange(50, 255), random.randrange(0, 255),
                 random.randrange(0, 255)))

        self.templist = [[] for i in range(20)]
        self.torquelist = [[] for i in range(20)]
        self.voltagelist = [[] for i in range(20)]

        self.crosshair = QLabel()
        self.pixmap = QtGui.QPixmap(
            os.path.join(rp.get_path('bitbots_hardware_rqt'), 'resource',
                         'cross.png'))
        self.crosshair.setPixmap(self.pixmap)
        self.crosshair.setParent(self._widget.label_4)
        self.crosshair.move(187, 187)

        self.crosshair2 = QLabel()
        self.pixmap = QtGui.QPixmap(
            os.path.join(rp.get_path('bitbots_hardware_rqt'), 'resource',
                         'cross.png'))
        self.crosshair2.setPixmap(self.pixmap)
        self.crosshair2.setParent(self._widget.label_11)
        self.crosshair2.move(87, 87)

        self.make_Graphs()

        self.votrigger.connect(lambda: self.update_graph(
            self.voltageplt, self.voltagelist, self.combobox2, 3))
        self.tetrigger.connect(lambda: self.update_graph(
            self.tempplt, self.templist, self.combobox3, 1))
        self.totrigger.connect(lambda: self.update_graph(
            self.torqueplt, self.torquelist, self.combobox, 2))

        #self._robot_ip = [l for l in ([ip for ip in socket.gethostbyname_ex(socket.gethostname())[2] if not ip.startswith("127.")][:1], [[(s.connect(('8.8.8.8', 53)), s.getsockname()[0], s.close()) for s in [socket.socket(socket.AF_INET, socket.SOCK_DGRAM)]][0][1]]) if l][0][0]
        self._robot, button_pressed = QInputDialog.getText(self._widget, "Robot?", \
                "Select your Robot. Example: nuc1", QLineEdit.Normal, "")

        self.diagnostics = rospy.Subscriber(
            "/{}/diagnostics".format(self._robot), DiagnosticArray,
            self.set_motor_diagnostics)
        self.joint_states = rospy.Subscriber(
            "/{}/joint_states".format(self._robot), JointState,
            self.set_motor_joint_states)
        self.buttons = rospy.Subscriber("/{}/buttons".format(self._robot),
                                        Buttons, self.set_buttons)
        self.imu = rospy.Subscriber("/{}/imu/data".format(self._robot), Imu,
                                    self.emit_imu_trigger)
        self.state = rospy.Subscriber("/{}/robot_state".format(self._robot),
                                      RobotControlState, self.set_robot_state)

        self.imutrigger.connect(self.set_imu)

        #self.rcvthread = ReceiverThread(self._robot_ip, self._robot_port)
        #self.rcvthread.start()

        self._widget.GraphenView.currentChanged.connect(
            self.current_graph_changed)
        self._widget.tabWidget.currentChanged.connect(
            self.current_outer_tab_changed)

        #self._widget.label_14.setText("IP: "+ [l for l in ([ip for ip in socket.gethostbyname_ex(socket.gethostname())[2] if not ip.startswith("127.")][:1], [[(s.connect(('8.8.8.8', 53)), s.getsockname()[0], s.close()) for s in [socket.socket(socket.AF_INET, socket.SOCK_DGRAM)]][0][1]]) if l][0][0])

        context.add_widget(self._widget)
        self._widget.show()
Beispiel #11
0
    def __init__(self):
        super(ManualWindow, self).__init__()
        self.setAttribute(QtCore.Qt.WA_DeleteOnClose)
        self.ui = '../forms/manual.ui'
        loadUi(self.ui, self)
        self.setWindowFlags(QtCore.Qt.FramelessWindowHint)

        self.layout = self.findChild(QtWidgets.QGridLayout, 'layout')

        self.mode = JOYSTICK_ONLY_MODE

        self.visual_frame = rviz.VisualizationFrame()
        self.visual_frame.setSplashPath("")
        self.visual_frame.initialize()
        self.add_rviz_config()

        self.visual_frame.setMenuBar(None)
        self.visual_frame.setStatusBar(None)
        self.visual_frame.setHideButtonVisibility(False)

        self.layout.addWidget(self.visual_frame)
        self.visual_frame.hide()

        self.manager = self.visual_frame.getManager()
        self.grid_display = self.manager.getRootDisplayGroup().getDisplayAt(0)

        self.video_frame = QtWidgets.QLabel()
        video_frame_font = QtGui.QFont("Verdana", 62, QtGui.QFont.Bold)
        self.video_frame.setFont(video_frame_font)
        self.video_frame.setText("No video frame")
        self.video_frame.setAlignment(QtCore.Qt.AlignCenter)
        self.video_frame.hide()
        self.layout.addWidget(self.video_frame)

        self.joystick_frame = QtWidgets.QLabel()
        pixmap = QtGui.QPixmap('../static/img/xbox_controller_grey.png')
        pixmap = pixmap.scaledToWidth(800)
        self.joystick_frame.setPixmap(pixmap)
        self.joystick_frame.setAlignment(QtCore.Qt.AlignCenter)
        self.layout.addWidget(self.joystick_frame)

        # Buttons
        self.change_mode_btn = self.findChild(QtWidgets.QPushButton,
                                              'changeModeBtn')
        self.turn_left = self.findChild(QtWidgets.QToolButton, 'turnRobotLeft')
        self.turn_right = self.findChild(QtWidgets.QToolButton,
                                         'turnRobotRight')
        self.stand_btn = self.findChild(QtWidgets.QPushButton, 'standBtn')
        self.walk_btn = self.findChild(QtWidgets.QPushButton, 'walkBtn')
        self.stairs_btn = self.findChild(QtWidgets.QPushButton, 'stairsBtn')
        self.exit_btn = self.findChild(QtWidgets.QPushButton, 'exitBtn')
        self.powerBtn = self.findChild(QtWidgets.QPushButton, 'powerBtn')
        self.emergency_btn = self.findChild(QtWidgets.QPushButton,
                                            'emergencyBtn')

        # Status indicators
        self.signal_btn = self.findChild(QtWidgets.QPushButton, 'signalBtn')
        self.controller_battery_btn = self.findChild(QtWidgets.QPushButton,
                                                     'controllerBatteryBtn')
        self.battery_btn = self.findChild(QtWidgets.QPushButton, 'batteryBtn')
        self.health_btn = self.findChild(QtWidgets.QPushButton, 'healthBtn')

        # Button connections
        self.emergency_btn.clicked.connect(self.turn_robot_off)
        self.powerBtn.clicked.connect(self.power_on)
        self.exit_btn.clicked.connect(self.close_window)
        self.change_mode_btn.clicked.connect(self.change_mode)

        # Button shortcuts
        self.exit_btn.setShortcut("Ctrl+Q")

        # Mode Layouts
        #self.video_frame = self.findChild(QtWidgets.QLabel, 'videoFrame')
        # self.xbox_controller_frame = self.findChild(
        #    QtWidgets.QLabel, 'xboxcontrollerFrame')
        # self.video_frame.hide()

        # Stylesheets
        self.powerBtn.setStyleSheet(
            "QPushButton#powerBtn:checked {color:black; background-color: red;}"
        )
        self.signal_btn.setStyleSheet(
            "QPushButton#signalBtn:checked {color:black; background-color: green;}"
        )

        self.video_stream_subscriber = VideoStreamSubscriber(
            'camera/image_raw', Image)

        self.show()
Beispiel #12
0
    def api_callback(self, data):
        """API callback from cloud"""
        print("Robot in position")
        self.tableWidget.setItem(self.table_row_tracker, 0, QtWidgets.QTableWidgetItem(str(datetime.datetime.fromtimestamp(rospy.get_time()))))
        self.tableWidget.setItem(self.table_row_tracker, 1, QtWidgets.QTableWidgetItem('N/A'))
        self.tableWidget.setItem(self.table_row_tracker, 2, QtWidgets.QTableWidgetItem('Move to new waypoint'))
        self.tableWidget.setItem(self.table_row_tracker, 3, QtWidgets.QTableWidgetItem('Sent'))
        self.tableWidget.setItem(self.table_row_tracker, 4, QtWidgets.QTableWidgetItem('N/A'))
        self.tableWidget.setItem(self.table_row_tracker, 5, QtWidgets.QTableWidgetItem('N/A'))
        self.tableWidget.setItem(self.table_row_tracker, 6, QtWidgets.QTableWidgetItem('N/A'))
        self.runningTaskLabel.setText('Move to new waypoint')
        self.table_row_tracker += 1
        command = 'python post_goal.py %s' % self.num_goal_reached
        _id = rospy.get_caller_id()
        _class = self.plan[self.num_goal_reached-1]
        print(_class)
        if len(_class) > 3:
            self.tableWidget.setItem(self.table_row_tracker, 0, QtWidgets.QTableWidgetItem(str(datetime.datetime.fromtimestamp(rospy.get_time()))))
            self.tableWidget.setItem(self.table_row_tracker, 1, QtWidgets.QTableWidgetItem('N/A'))
            self.tableWidget.setItem(self.table_row_tracker, 2, QtWidgets.QTableWidgetItem('Move head to position'))
            self.tableWidget.setItem(self.table_row_tracker, 3, QtWidgets.QTableWidgetItem('Ongoing'))
            self.tableWidget.setItem(self.table_row_tracker, 4, QtWidgets.QTableWidgetItem('N/A'))
            self.tableWidget.setItem(self.table_row_tracker, 5, QtWidgets.QTableWidgetItem('N/A'))
            self.tableWidget.setItem(self.table_row_tracker, 6, QtWidgets.QTableWidgetItem('N/A'))
            self.runningTaskLabel.setText('Move head to position')
            self.table_row_tracker += 1
            time.sleep(10)
            self.tableWidget.setItem(self.table_row_tracker-1, 3, QtWidgets.QTableWidgetItem('Complete'))
            self.post_goal()
            print("New goal sent, waiting for database to update")
            time.sleep(8)
            URL = 'http://dr0nn1.ddns.net:5000/%s/1' % _class
            response = requests.get(URL)
            content = response.json()
            tag = 'N/A'
            value = 'N/A'
            warning = 'N/A'
            alarm = 'N/A'
            value = 'N/A'

            if _class == 'manometers':
                value = float(content['value'])
                warning_low = float(content['low_warning_limit'])
                warning_high = float(content['high_warning_limit'])
                alarm_low = float(content['low_alarm_limit'])
                alarm_high = float(content['high_alarm_limit'])

                if value > warning_high and value < alarm_high:
                    warning = 'Warning high'
                elif value < warning_low and value > alarm_low:
                    warning = 'Warning low'
                elif value > alarm_high:
                    alarm = 'Alarm high'
                elif value < alarm_low:
                    alarm = 'Alarm low'
                tag = content['tag']
                
            if _class == 'valve':
                normal_condition = content['normal_condition']
                should_be = content['is_open']
                tag = content['tag']
                if value is not should_be:
                    warning = 'Not in position'

            IMG = content['img'].encode('latin1')
            rgb_image = np.fromstring(IMG, dtype=np.uint8).reshape((480, 640, 3))
            height, width, channel = rgb_image.shape
            bytesPerLine = 3 * width
            qImg = QtGui.QImage(rgb_image.data, width, height, bytesPerLine, QtGui.QImage.Format_RGB888)
            self.column_images[self.column_image_counter].setPixmap(QtGui.QPixmap(qImg))
            self.tableWidget.setItem(self.table_row_tracker, 0, QtWidgets.QTableWidgetItem(str(datetime.datetime.fromtimestamp(rospy.get_time()))))
            self.tableWidget.setItem(self.table_row_tracker, 1, QtWidgets.QTableWidgetItem(tag))
            self.tableWidget.setItem(self.table_row_tracker, 2, QtWidgets.QTableWidgetItem('Inspecting equipment'))
            self.tableWidget.setItem(self.table_row_tracker, 3, QtWidgets.QTableWidgetItem('Complete'))
            self.tableWidget.setItem(self.table_row_tracker, 4, QtWidgets.QTableWidgetItem(value))
            self.tableWidget.setItem(self.table_row_tracker, 5, QtWidgets.QTableWidgetItem(warning))
            self.tableWidget.setItem(self.table_row_tracker, 6, QtWidgets.QTableWidgetItem(alarm))
            self.runningTaskLabel.setText('Inspecting equipment')
            self.table_row_tracker += 1
            self.column_image_counter += 1
            if self.column_image_counter > 2:
                self.column_image_counter = 0
        else:
            time.sleep(2)
            self.post_goal()