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))
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))
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)
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))
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)
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)
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())
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()
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()
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()