def __init__(self, columns, parent=None): super(GenericCsvParserDialog, self).__init__('CSV Choose the columns', parent_win=parent) self._filename = None self._columns = columns self._columns_indexes = [] self._rownum = 0 # Definition of the forms fields self._filename = ControlFile('CSV File') self._separator = ControlText('Separator', 'auto') self._startingrow = ControlNumber('Starting row', 0) for index, column in enumerate(columns): setattr(self, '_col_{0}'.format(index), ControlNumber(column, index, -1, 1000)) self._filePreview = ControlList('Preview') self._loadButton = ControlButton('Load') form_row = ['_separator'] + [ '_col_{0}'.format(index) for index, column in enumerate(columns) ] + ['_loadButton'] self._formset = [('_filename', '_startingrow'), tuple(form_row), '_filePreview'] self._separator.changed_event = self.__refreshPreview self._filename.changed_event = self.__refreshPreview self._startingrow.changed_event = self.__refreshPreview self._loadButton.value = self.load self._load_event = None
def __init__(self, parent=None, parentWindow=None): BaseWidget.__init__(self, 'Events stats', parentWindow=parentWindow) self._parent = parent self._bounds = ControlBoundingSlider('Frames range', 1, 100, horizontal=True) self._nframes = ControlNumber('Merge in a group of', 1800) self._videofsp = ControlNumber('FPS', 30.0) self._analyseButton = ControlButton('Calculate graphs') self._events = ControlCheckBoxList() self._graph = ControlVisVis('Graph') self._showTotalCounts = ControlCheckBox('Show total events counting') self._showEvtsCounts = ControlCheckBox('Show events counting', True) self._progress = ControlProgress() self._exportDurations = ControlButton('Export durations') self._exportTotals = ControlButton('Export totals') self._formset = [ (' ', '_showEvtsCounts', '|', '_showTotalCounts', '|', '_nframes', '_videofsp', '_analyseButton', '_exportDurations', '_exportTotals'), '_bounds', {'a:Graph': ['_graph'], 'c:Events selection':['_events']}, '_progress' ] self._analyseButton.value = self.__generate_graph self._exportDurations.value = self.__export_durations self._exportTotals.value = self.__export_totals self._progress.hide() self.__load_events() self.setMinimumWidth(800) self.setMinimumHeight(600)
def __init__(self, timelineWidget=None): super(GraphsProperties, self).__init__('Graphs properties') self.setContentsMargins(10, 10, 10, 10) self._timeline = timelineWidget # Definition of the forms fields self._graphs_list = ControlList('Graphs list') self._name = ControlText('Name') self._min_value = ControlNumber('Min') self._max_value = ControlNumber('Max') self._values_zoom = ControlSlider('Amplitude', 100, 60, 400) self._values_top = ControlNumber('Top position', 0, -1000, 1000) self._remove_graph_btn = ControlButton('Remove graph') self._formset = [ (['_graphs_list', '_remove_graph_btn'], '||', [ ' ', '_name', ('_min_value', '_max_value'), ('_values_top', ' '), '_values_zoom', ' ' ]), ] self._graphs_list.itemSelectionChanged = self.__graphs_list_selection_changed self._loaded = False self._name.changed = self.__save_graphs_changes self._min_value.changed = self.__save_graphs_changes self._max_value.changed = self.__save_graphs_changes self._values_zoom.changed = self.__save_graphs_changes self._values_top.changed = self.__save_graphs_changes
def __init__(self, timeline=None): super(Graph2Event, self).__init__('Graph to event', parent_win=timeline) self.setContentsMargins(10, 10, 10, 10) self._timeline = timeline # Definition of the forms fields self._graphs_list = ControlList('Graphs list (try double click)') self._equation = ControlTextArea('Equation') self._eventname = ControlText('Event name', 'New event') self._rownumber = ControlNumber('Row number', 0, 0, 1000) self._mindiff = ControlNumber('Minimum of frames', 0, 0, 1000000) self._genevts_btn = ControlButton('Generate events') self._formset = [ (['_graphs_list'], '||', [ ('_eventname', '_rownumber', '_mindiff'), '_equation', '_genevts_btn', ]), ] self._graphs_list.cell_double_clicked_event = self.__cell_double_clicked_evt self._graphs_list.readonly = True self._graphs_list.select_entire_row = True self._genevts_btn.value = self.__generage_events_evt
def __init__(self, timelineWidget=None, parent_win=None): super(GraphsProperties, self).__init__('Graphs properties', parent_win=parent_win) self.setContentsMargins(10, 10, 10, 10) self._mainwindow = parent_win self._timeline = timelineWidget #self.setMaximumWidth(300) # Definition of the forms fields self._graphs_list = ControlList('Graphs list') self._name = ControlText('Name') self._min_value = ControlNumber('Min', 0, -sys.float_info.max, sys.float_info.max) self._max_value = ControlNumber('Max', 0, -sys.float_info.max, sys.float_info.max) self._values_zoom = ControlSlider('Amplitude', 100, 60, 400) self._values_top = ControlNumber('Bottom', 0, -1000, 1000) self._remove_graph_btn = ControlButton('Remove graph') self._value = ControlLabel() self._graphs_list.readonly = True self._formset = [ (['_graphs_list', '_remove_graph_btn'], '||', [ ' ', '_name', ('_min_value', '_max_value', ' '), ('_values_top', ' '), '_values_zoom', 'info:Choose one graph and move the mouse over \nthe timeline to visualize the coordenates.', '_value' ]), ] self._graphs_list.select_entire_row = True self._graphs_list.item_selection_changed_event = self.__graphs_list_selection_changed self._loaded = False self._current_selected_graph = None self._name.changed_event = self.__save_graphs_changes self._min_value.changed_event = self.__save_graphs_changes self._max_value.changed_event = self.__save_graphs_changes self._values_zoom.changed_event = self.__save_graphs_changes self._values_top.changed_event = self.__save_graphs_changes self._name.enabled = False self._min_value.enabled = False self._max_value.enabled = False self._values_zoom.enabled = False self._values_top.enabled = False self._remove_graph_btn.enabled = False self._remove_graph_btn.value = self.__remove_chart
def __init__(self, timeline=None): super(BonsaiImportFileDlg, self).__init__('Import file') self._file = ControlFile('File to import') self._fps = ControlNumber('Video FPS', 30) self._formset = [('_fps', '_file')]
def __init__(self): super(CsvParserDialog, self).__init__('CSV Choose the columns') self._filename = None # Definition of the forms fields self._filename = ControlFile('CSV File') self._separator = ControlText('Separator', ';') self._frameCol = ControlNumber('Frame column', 0, 0, 100) self._xCol = ControlNumber('X column', 1, 0, 100) self._yCol = ControlNumber('Y column', 2, 0, 100) self._zCol = ControlNumber('Z column', 3, 0, 100) self._filePreview = ControlList('Preview') self._loadButton = ControlButton('Load') self._formset = ['_filename', ('_separator', '_frameCol', '_xCol', '_yCol', '_zCol', '_loadButton'), '_filePreview'] self._separator.changed = self.__refreshPreview self._filename.changed = self.__refreshPreview
def __init__(self, columns, parent=None): super(GenericCsvParserDialog, self).__init__('CSV Choose the columns', parent_win=parent) self._filename = None self._columns = columns self._columns_indexes = [] self._rownum = 0 # Definition of the forms fields self._filename = ControlFile('CSV File') self._separator = ControlCombo('Separator', default='auto') self._startingrow = ControlNumber('Starting row', default=0) for index, column in enumerate(columns): setattr( self, '_col_{0}'.format(index), ControlNumber(column, default=index, minimum=-1, maximum=1000)) self._filePreview = ControlList('Preview') self._loadButton = ControlButton('Load') form_row = ['_separator'] + [ '_col_{0}'.format(index) for index, column in enumerate(columns) ] + ['_loadButton'] self._formset = [('_filename', '_startingrow'), tuple(form_row), '_filePreview'] self._separator.changed_event = self.__refreshPreview self._filename.changed_event = self.__refreshPreview self._startingrow.changed_event = self.__refreshPreview self._loadButton.value = self.load self._load_event = None self._separator.add_item('auto', 'auto') self._separator.add_item(';', ';') self._separator.add_item(',', ',') self._separator.add_item('TAB', '\t') self._separator.add_item('Excel', csv.excel) self._separator.add_item('Excel TAB', csv.excel_tab)
def __init__(self): super(ChooseColumnsWindow, self).__init__('CSV Choose the columns') self._filename = None # Definition of the forms fields self._filename = ControlFile('File') self._separator = ControlText('Separator', ';') self._frameCol = ControlNumber('Frame column', 0, 0, 100) self._xCol = ControlNumber('X column', 1, 0, 100) self._yCol = ControlNumber('Y column', 2, 0, 100) self._showZ = ControlCheckBox('Import Z value') # Not being used yet self._zCol = ControlNumber('Z column', 0, 0, 100) # Not being used yet self._filePreview = ControlList('Preview') self._loadButton = ControlButton('Load') self._formset = ['_filename', ('_separator', '_frameCol', '_xCol', '_yCol', '_loadButton'), '_filePreview'] self._separator.changed = self.__refreshPreview self._filename.changed = self.__refreshPreview self._zCol.hide() self._showZ.changed = self.__showZChanged
def init_form(self): buttons_layout = QGridLayout() button_size_policy = QSizePolicy(QSizePolicy.Preferred, QSizePolicy.Preferred) up_icon = qta.icon('fa.arrow-up') up_button = QPushButton(up_icon, '') up_button.setSizePolicy(button_size_policy) up_button.clicked[bool].connect(self._up) down_icon = qta.icon('fa.arrow-down') down_button = QPushButton(down_icon, '') down_button.setSizePolicy(button_size_policy) down_button.clicked[bool].connect(self._down) left_icon = qta.icon('fa.arrow-left') left_button = QPushButton(left_icon, '') left_button.setSizePolicy(button_size_policy) left_button.clicked[bool].connect(self._left) right_icon = qta.icon('fa.arrow-right') right_button = QPushButton(right_icon, '') right_button.setSizePolicy(button_size_policy) right_button.clicked[bool].connect(self._right) home_icon = qta.icon('fa.home') home_button = QPushButton(home_icon, '') home_button.setSizePolicy(button_size_policy) home_button.clicked[bool].connect(self._home) buttons_layout.addWidget(up_button, 0, 1) buttons_layout.addWidget(down_button, 2, 1) buttons_layout.addWidget(left_button, 1, 0) buttons_layout.addWidget(right_button, 1, 2) buttons_layout.addWidget(home_button, 1, 1) layout = QVBoxLayout() self._step = ControlNumber(label="Step Size", default=self._step, minimum=0, maximum=float('inf'), decimals=5) layout.addLayout(buttons_layout) layout.addWidget(self._step.form) self._form = QWidget() self._form.setLayout(layout) self.label = self._label
def __init__(self, parent_win, label, begin, end): BaseWidget.__init__(self, 'Edit frame', parent_win=parent_win) if conf.PYFORMS_USE_QT5: self.layout().setContentsMargins(5, 5, 5, 5) else: self.layout().setMargin(5) self._label = ControlText('Label', default=label) self._begin = ControlNumber('Begin', default=begin, minimum=0, maximum=100000000000000) self._end = ControlNumber('End', default=end, minimum=0, maximum=100000000000000) self._applybtn = ControlButton('Apply') self.formset = ['_label', ('_begin', '_end'), '_applybtn'] self._begin.changed_event = self.__begin_changed_event self._end.changed_event = self.__end_changed_event
def __init__(self): self._labjack = ljm.openS("T7", "USB", "ANY") self._serial_number = ljm.eReadName(self._labjack, 'SERIAL_NUMBER') # Start making the GUI to display when this sensor is selected self._widget = BaseWidget() # Label to show the serial number of the Labjack self._widget.serial_number = ControlLabel() self._widget.serial_number.value = str(int(self._serial_number)) # Number input to get the threshold for an 'on' signal # for frequency calculations self._widget.threshold = ControlNumber(label="Threshold", default=0.1, minimum=0, maximum=float('inf'), decimals=5)
def laser_custom_config(): """ Get the GUI config to configure the laser The GUI is the same for each laser axis and for the laser lightsource """ global WIDGET if WIDGET is None: widget = BaseWidget("Laser Config") widget.power_supply = ControlCombo(label="Power Supply") widget.power_supply += ('None', None) for power in DEVICES['Power Supply']: widget.power_supply += power widget.power_supply.current_index_changed_event = update_laser widget.power_channel = ControlNumber(label="Power Supply Channel", default=1, minimum=1, maximum=4) widget.signal_generator = ControlCombo(label="Signal Generator") widget.signal_generator += ('None', None) for signal in DEVICES['Signal Generator']: widget.signal_generator += signal widget.signal_generator.current_index_changed_event = update_laser widget.formset = [ "h5:Laser Using", 'power_supply', 'power_channel', 'signal_generator', "(All laser axis use the same laser)" ] WIDGET = widget return WIDGET
def get_custom_config(self): """ Gets a pyforms BaseWidget to complete configuration for RotationAxis """ if self._widget is None: widget = BaseWidget("Rotate Axis Config") widget.device_list = ControlCombo(label="Device") widget.device_list += ('None', None) for device in DEVICES: widget.device_list += device if self._rotation_stage is not None: widget.value = self._rotation_stage.serial_number widget.device_list.current_index_changed_event = self._update_stage widget.distance_field = ControlNumber( label="Distance to Surface", default=self._distance_to_surface, minimum=0, maximum=float('inf'), decimals=5) widget.distance_field.key_pressed_event = self._update_distance_to_surface widget.formset = ['device_list', 'distance_field', ''] self._widget = widget self._update_stage(0) if self._rotation_stage is not None: self._rotation_stage.identify() return self._widget
class AxisTab(BaseWidget): """ The Axis Tab in the main GUI """ _axis = [] _xaxis = None _yaxis = None _events = True _update_function = None def __init__(self, update_function=None): super().__init__("Axis Tab") self._update_function = update_function self._axis_list = ControlList(label='Axis List', default='', add_function=self._on_add_axis, remove_function=self._on_remove_axis) self._axis_list.item_selection_changed_event = self._on_selection_changed self._axis_list.data_changed_event = self._on_data_changed self._axis_list.select_entire_row = True self._axis_hw_type = ControlLabel() self._min = ControlNumber(label="Minimum", minimum=-float('inf'), maximum=float('inf'), decimals=5) self._min.changed_event = self._on_min_changed self._min.visible = False self._max = ControlNumber(label="Maximum", minimum=-float('inf'), maximum=float('inf'), decimals=5) self._max.changed_event = self._on_max_changed self._max.visible = False self._norm_min = ControlNumber(label=" 0%", minimum=-float('inf'), maximum=float('inf'), decimals=5) self._norm_min.changed_event = self._on_norm_min_changed self._norm_min.visible = False self._norm_max = ControlNumber(label="100%", minimum=-float('inf'), maximum=float('inf'), decimals=5) self._norm_max.changed_event = self._on_norm_max_changed self._norm_max.visible = False self._special_axis = ControlEmptyWidget() self._axis_custom = ControlEmptyWidget() self._load_button = ControlFile(label="Load Axis") self._load_button.changed_event = self._on_load_axis self._save_button = ControlButton(label="Save Axis") self._save_button.value = self._on_save_axis self._save_button.visible = False self.formset = [ '_axis_list', ('_axis_hw_type', '_special_axis'), ('_min', '_max'), ('_norm_min', '_norm_max'), '_axis_custom', ('_load_button', '_save_button') ] def _update_shown_axis(self): index = self._axis_list.selected_row_index if not index is None: axis = self._axis[index] if not axis is None: assert isinstance(axis, ControlAxis) # Get the hardware type from the name of the class self._axis_hw_type.value = type(axis).__name__ # Update the minimum box if not self._min.visible: self._min.visible = True self._min.label = "Minimum ({})".format(axis.get_units()) self._events = False self._min.value = axis.get_min() self._events = True # Update the maximum box if not self._max.visible: self._max.visible = True self._max.label = "Maximum ({})".format(axis.get_units()) self._events = False self._max.value = axis.get_max() self._events = True # Update the norm_minimum box if not self._norm_min.visible: self._norm_min.visible = True self._norm_min.label = " 0% ({})".format(axis.get_units()) self._events = False self._norm_min.value = axis.get_norm_min() self._events = True # Update the norm_maximum box if not self._norm_max.visible: self._norm_max.visible = True self._norm_max.label = "100% ({})".format(axis.get_units()) self._events = False self._norm_max.value = axis.get_norm_max() self._events = True # Populate the special axis combo special_axis = ControlCombo(label="Special Axis") special_axis.add_item('', '') special_axis.add_item("X Axis", 'xaxis') special_axis.add_item("Y Axis", 'yaxis') if axis == self._xaxis: special_axis.value = 'xaxis' elif axis == self._yaxis: special_axis.value = 'yaxis' def axis_changed(_): """ Called when axis changed """ if special_axis.value == 'xaxis': self._xaxis = axis if self._yaxis == axis: self._yaxis = None elif special_axis.value == 'yaxis': self._yaxis = axis if self._xaxis == axis: self._xaxis = None else: if self._xaxis == axis: self._xaxis = None if self._yaxis == axis: self._yaxis = None self._send_events() print("Making Special Combo") special_axis.current_index_changed_event = axis_changed self._events = False self._special_axis.value = None self._special_axis.value = special_axis self._events = True # Update the custom config GUI self._axis_custom.value = axis.get_custom_config() self._save_button.visible = True else: self._axis_hw_type.value = '' self._min.visible = False self._max.visible = False self._norm_min.visible = False self._norm_max.visible = False self._special_axis.value = None self._axis_custom.value = None self._save_button.visible = False else: self._axis_hw_type.value = '' self._min.visible = False self._max.visible = False self._norm_min.visible = False self._norm_max.visible = False self._special_axis.value = None self._axis_custom.value = None self._save_button.visible = False def _send_events(self): if self._events and self._update_function is not None: self._update_function({ 'axis': self._axis, 'xaxis': self._xaxis, 'yaxis': self._yaxis }) def update_events(self, events): #print("Axis Tab", events) for axis in self._axis: if isinstance(axis, ControlAxis): axis.update_events(events) def _on_add_axis(self): win = NewAxisWindow(self.add_axis) win.show() def _on_remove_axis(self): index = self._axis_list.selected_row_index if not index is None: axis = self._axis[index] assert isinstance(axis, ControlAxis) self._axis_list -= index self._axis.pop(index) if not axis is None: if axis == self._xaxis: self._xaxis = None if axis == self._yaxis: self._yaxis = None self._send_events() def add_axis(self, axis): """ Add an axis to the list """ if not axis is None: self._axis_list += [axis.get_name()] self._axis += [axis] self._axis_list.tableWidget.selectRow(self._axis_list.rows_count - 1) # self._update_shown_axis() self._send_events() def _on_selection_changed(self): self._update_shown_axis() def _on_data_changed(self, row, _, item): if row < len(self._axis): axis = self._axis[row] if not axis is None: axis.set_name(item) #self._update_shown_axis() self._send_events() def _on_min_changed(self): index = self._axis_list.selected_row_index if not index is None: axis = self._axis[index] assert isinstance(axis, ControlAxis) if axis is not None: if axis.get_min() != self._min.value: axis.set_min(self._min.value) self._send_events() def _on_max_changed(self): index = self._axis_list.selected_row_index if not index is None: axis = self._axis[index] assert isinstance(axis, ControlAxis) if axis is not None: if axis.get_max() != self._max.value: axis.set_max(self._max.value) self._send_events() def _on_norm_min_changed(self): index = self._axis_list.selected_row_index if not index is None: axis = self._axis[index] assert isinstance(axis, ControlAxis) if axis is not None: if axis.get_norm_min() != self._norm_min.value: axis.set_norm_min(self._norm_min.value) self._send_events() def _on_norm_max_changed(self): index = self._axis_list.selected_row_index if not index is None: axis = self._axis[index] assert isinstance(axis, ControlAxis) if axis is not None: if axis.get_norm_max() != self._norm_max.value: axis.set_norm_max(self._norm_max.value) self._send_events() def _on_load_axis(self): """ Load an axis from a saved axis file """ if self._load_button.value is not None and self._load_button.value != '': data = {} with open(self._load_button.value) as output_file: try: data = dict(json.load(output_file)) except: print("Could not read file") return print(data) if 'hw_type' in data: name = "" if 'name' in data: name = data['name'] axis = None for axis_type in ControlAxis.__subclasses__(): if axis_type.__name__ == data['hw_type']: axis = axis_type(name) if axis is None: print("No hardware type found!") return assert isinstance(axis, ControlAxis) self.add_axis(axis) #self._update_shown_axis() if 'min' in data: self._min.load_form(data['min']) if 'max' in data: self._max.load_form(data['max']) if 'norm_min' in data: self._norm_min.load_form(data['norm_min']) if 'norm_max' in data: self._norm_max.load_form(data['norm_max']) if 'special_axis' in data: self._special_axis.value.load_form(data['special_axis']) self._axis_custom.value = axis.get_custom_config() if 'axis-specific' in data and self._axis_custom.value is not None: self._axis_custom.value.load_form(data['axis-specific']) def _on_save_axis(self): """ Save an axis to a file """ data = {} data['name'] = self._axis_list.get_currentrow_value()[0] data['hw_type'] = self._axis_hw_type.value data['min'] = {} self._min.save_form(data['min']) data['max'] = {} self._max.save_form(data['max']) data['norm_min'] = {} self._norm_min.save_form(data['norm_min']) data['norm_max'] = {} self._norm_max.save_form(data['norm_max']) data['special_axis'] = {} self._special_axis.value.save_form(data['special_axis']) if self._axis_custom.value is not None: data['axis-specific'] = {} self._axis_custom.value.save_form(data['axis-specific']) print(data) filename = QFileDialog.getSaveFileName(self, 'Save Axis', filter='JSON Files (*.json)') if filename[0] is not None and filename[0] != '': with open(filename[0], 'w') as output_file: json.dump(data, output_file, indent=2)
def __init__(self, update_function=None): super().__init__("Points") self._update_function = update_function self._open_file = ControlFile( label="Points File: " ) self._open_file.changed_event = self._on_open_file self._save_file = ControlButton( label="Save" ) self._save_file.value = self._save_points self._points_list = ControlList( label="Points", add_function=self._add_point, remove_function=self._remove_point, auto_resize=False ) self._points_list.data_changed_event = self._change_point self._points_list.horizontal_headers = [ axis.get_name() for axis in self._axis] self._pre_delay_time = ControlNumber( label="Pre Delay Time (s)", default=1, minimum=0, maximum=float('inf'), decimals=5 ) self._measure_time = ControlNumber( label="Measure Time (s)", default=5, minimum=0, maximum=float('inf'), decimals=5 ) self._post_delay_time = ControlNumber( label="Post Delay Time (s)", default=1, minimum=0, maximum=float('inf'), decimals=5 ) self._scan_frequency = ControlNumber( label="Scan Frequency (Hz)", default=10, minimum=0, maximum=float('inf'), decimals=5 ) self._out_file = ControlDir( label="Output Folder: " ) self._scan_button = ControlButton( label="Scan" ) self._scan_button.value = self._begin_scan self.formset = [ ('_open_file', '_save_file'), '_points_list', ('_pre_delay_time', '_post_delay_time'), ('_measure_time', '_scan_frequency'), '_out_file', '_scan_button', ]
def __init__(self, update_function=None): super().__init__("Axis Tab") self._update_function = update_function self._axis_list = ControlList(label='Axis List', default='', add_function=self._on_add_axis, remove_function=self._on_remove_axis) self._axis_list.item_selection_changed_event = self._on_selection_changed self._axis_list.data_changed_event = self._on_data_changed self._axis_list.select_entire_row = True self._axis_hw_type = ControlLabel() self._min = ControlNumber(label="Minimum", minimum=-float('inf'), maximum=float('inf'), decimals=5) self._min.changed_event = self._on_min_changed self._min.visible = False self._max = ControlNumber(label="Maximum", minimum=-float('inf'), maximum=float('inf'), decimals=5) self._max.changed_event = self._on_max_changed self._max.visible = False self._norm_min = ControlNumber(label=" 0%", minimum=-float('inf'), maximum=float('inf'), decimals=5) self._norm_min.changed_event = self._on_norm_min_changed self._norm_min.visible = False self._norm_max = ControlNumber(label="100%", minimum=-float('inf'), maximum=float('inf'), decimals=5) self._norm_max.changed_event = self._on_norm_max_changed self._norm_max.visible = False self._special_axis = ControlEmptyWidget() self._axis_custom = ControlEmptyWidget() self._load_button = ControlFile(label="Load Axis") self._load_button.changed_event = self._on_load_axis self._save_button = ControlButton(label="Save Axis") self._save_button.value = self._on_save_axis self._save_button.visible = False self.formset = [ '_axis_list', ('_axis_hw_type', '_special_axis'), ('_min', '_max'), ('_norm_min', '_norm_max'), '_axis_custom', ('_load_button', '_save_button') ]
def __init__(self): super(UI, self).__init__("Bose SoundTouch UI") self.ip = None self.speakers = {} self._speakers = ControlCheckBoxList("Speakers") self._speakers.selection_changed_event = self.speaker_selected self._remove = ControlButton("Remove") self._set = ControlButton("Set") self._add = ControlButton("Add") self._volume = ControlNumber() self._volume.decimals = 0 self._volume_set = ControlButton("Set Volume") self._volume_get = ControlButton("Get Volume") self._volume_value = ControlLabel() self._bass = ControlNumber() self._bass.decimals = 0 self._bass_set = ControlButton("Set Bass (neg)") self._bass_get = ControlButton("Get Bass") self._bass_value = ControlLabel() self._power = ControlButton("Power") self._mute = ControlButton("Mute") self._now_playing = ControlButton("Now Playing") self._prev = ControlButton("Prev") self._play_pause = ControlButton("Play/Pause") self._next = ControlButton("Next") self._p1 = ControlButton("P1") self._p2 = ControlButton("P2") self._p3 = ControlButton("P3") self._p4 = ControlButton("P4") self._p5 = ControlButton("P5") self._p6 = ControlButton("P6") self._zone = ControlCheckBoxList("Zone Info") self._info = ControlCheckBoxList("Speaker Info") self._np = ControlCheckBoxList("Now Playing") self._art = ControlImage() self.formset = (['_zone', '_info'], [ ('_speakers'), ('_remove', '_set', '_add'), ('_volume', '_volume_set', '_volume_get', '_volume_value'), ('_bass', '_bass_set', '_bass_get', '_bass_value'), ('_power', '_mute', '_now_playing'), ('_prev', '_play_pause', '_next'), ('_p1', '_p2', '_p3'), ('_p4', '_p5', '_p6') ], ['_np', '_art']) self._add.value = self.__add self._set.value = self.__set self._remove.value = self.__remove self._volume_get.value = self.__volume_get self._volume_set.value = self.__volume_set self._bass_get.value = self.__bass_get self._bass_set.value = self.__bass_set self._power.value = self.__power self._mute.value = self.__mute self._now_playing.value = self.set_now_playing self._prev.value = self.__prev self._play_pause.value = self.__play_pause self._next.value = self.__next self._p1.value = self.__preset1 self._p2.value = self.__preset2 self._p3.value = self.__preset3 self._p4.value = self.__preset4 self._p5.value = self.__preset5 self._p6.value = self.__preset6 self.zeroconf = Zeroconf() self.st_listener = STListener(self.device_added, self.device_removed) self.browser = ServiceBrowser(self.zeroconf, "_soundtouch._tcp.local.", self.st_listener) self.select_device_timer = threading.Timer(10.0, self.select_device)
def __init__(self): BaseWidget.__init__(self, "Mandelbrot Set Generator") self._redSlider = ControlSlider(label="Red", min=0, max=255) self._blueSlider = ControlSlider(label="Blue", min=0, max=255) self._greenSlider = ControlSlider(label="Green", min=0, max=255) self._redSliderTwo = ControlSlider(label="Red 2", defaultValue=255, min=0, max=255) self._blueSliderTwo = ControlSlider(label="Blue 2", defaultValue=255, min=0, max=255) self._greenSliderTwo = ControlSlider(label="Green 2", defaultValue=255, min=0, max=255) self._randomizeFirstColor = ControlCheckBox( label='Randomize First Color?') self._randomizeFirstColor.value = True self._randomizeSecondColor = ControlCheckBox( label="Randomize Second Color?") self._randomizeSecondColor.value = True self._randomizeBrightness = ControlCheckBox( label="Randomize Brightness?") self._brightnessSlider = ControlSlider(label="Brightness", defaultValue=255, min=0, max=255) self._xSlider = ControlText(label="X", defaultValue="-1.0") self._ySlider = ControlText(label="Y", defaultValue="0") self._zoomSlider = ControlNumber(label="Zoom", defaultValue=1, min=1, max=1000000) self._entropySlider = ControlSlider(label="Entropy", defaultValue=5000, min=100, max=100000) self._randomPreviewButton = ControlButton( label="Smart Randomize and Generate Preview") self._randomPreviewButton.value = self.randomPreviewAction self._previewButton = ControlButton(label="Generate Preview (120x120)") self._previewButton.value = self.previewAction self._generateButton = ControlButton(label="Generate (500x500)") self._generateButton.value = self.generateAction self._exportButton = ControlButton( label="Export For Desktop (2049x1153)") self._exportButton.value = self.exportAction self._fourKExportButton = ControlButton( label="Export at 4K UHD (3840x2160)") self._fourKExportButton.value = self.fourKExportAction self._phoneExportButton = ControlButton( label="Export for Phone (1080x1920)") self._phoneExportButton.value = self.phoneExportAction self._randomButton = ControlButton(label="Randomize") self._randomButton.value = self.randomAction self._formset = [ (('_redSlider', '_greenSlider', '_blueSlider'), "=", ('_redSliderTwo', '_greenSliderTwo', '_blueSliderTwo'), '=', ' ', '_randomizeFirstColor', '_randomizeSecondColor', '_randomizeBrightness', '|', '_brightnessSlider', "=", '_entropySlider', '_xSlider', '_ySlider', '_zoomSlider', "=", '_randomButton', '_randomPreviewButton', '_previewButton', '_generateButton', '_exportButton', '_fourKExportButton', '_phoneExportButton') ]
class ChooseColumnsWindow(BaseWidget): def __init__(self): super(ChooseColumnsWindow, self).__init__('CSV Choose the columns') self._filename = None # Definition of the forms fields self._filename = ControlFile('File') self._separator = ControlText('Separator', ';') self._frameCol = ControlNumber('Frame column', 0, 0, 100) self._xCol = ControlNumber('X column', 1, 0, 100) self._yCol = ControlNumber('Y column', 2, 0, 100) self._showZ = ControlCheckBox('Import Z value') # Not being used yet self._zCol = ControlNumber('Z column', 0, 0, 100) # Not being used yet self._filePreview = ControlList('Preview') self._loadButton = ControlButton('Load') self._formset = ['_filename', ('_separator', '_frameCol', '_xCol', '_yCol', '_loadButton'), '_filePreview'] self._separator.changed = self.__refreshPreview self._filename.changed = self.__refreshPreview self._zCol.hide() self._showZ.changed = self.__showZChanged def __showZChanged(self): if self._showZ.value: self._zCol.show() else: self._zCol.hide() @property def filename(self): return self._filename.value @filename.setter def filename(self, value): self._filename.value = value self.__refreshPreview() @property def loadFileEvent(self): return self._loadButton.value @loadFileEvent.setter def loadFileEvent(self, value): self._loadButton.value = value @property def separator(self): return self._separator.value @property def frameColumn(self): return self._frameCol.value @property def xColumn(self): return self._xCol.value @property def yColumn(self): return self._yCol.value @property def zColumn(self): if self._showZ.value: return self._zCol.value else: return None def __refreshPreview(self): if self._filename.value != None and self._filename.value != '': with open(self._filename.value) as csvfile: spamreader = csv.reader(csvfile, delimiter=self._separator.value) self._filePreview.value = [] self._filePreview.horizontalHeaders = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", ] for i, row in enumerate(spamreader): self._filePreview += row if i >= 10: break