def add_current_price(parent): pid = dpg.generate_uuid() with dpg.node(label="Current Price", pos=[10, 10], parent=parent, user_data=CurrentPriceNode(pid), id=pid): _add_inputs_and_outputs(dpg.get_item_user_data(pid), node_layouts[CurrentPriceNode])
def add_distance(parent): pid = dpg.generate_uuid() with dpg.node(label="Distance A to B", pos=[10, 10], parent=parent, user_data=DistanceNode(pid), id=pid): _add_inputs_and_outputs(dpg.get_item_user_data(pid), node_layouts[DistanceNode])
def add_dealer(parent, dealer): pid = dpg.generate_uuid() with dpg.node(label="Dealer", pos=[10, 10], parent=parent, user_data=DealerNode(pid, dealer), id=pid): with dpg.node_attribute(attribute_type=dpg.mvNode_Attr_Static): dpg.add_text('BINANCE') _add_inputs_and_outputs(dpg.get_item_user_data(pid), node_layouts[DealerNode])
def add_symbol(parent): pid = dpg.generate_uuid() with dpg.node(label="Symbol", pos=[10, 10], parent=parent, user_data=SymbolNode(pid), id=pid): with dpg.node_attribute(label='symbol', attribute_type=dpg.mvNode_Attr_Output): dpg.add_combo(('BTC', 'ETH'), default_value='BTC', callback=lambda s, a: dpg.get_item_user_data(pid). update_symbol(a), width=100)
def submit(self, parent): with dpg.node(parent=parent, label=self.label, id=self.uuid): with dpg.node_attribute(attribute_type=dpg.mvNode_Attr_Static): dpg.add_button(label="Execute", user_data=self, callback=lambda s, a, u: u.execute()) for attribute in self._input_attributes: attribute.submit(self.uuid) with dpg.node_attribute(parent=self.uuid, attribute_type=dpg.mvNode_Attr_Static, user_data=self, id=self.static_uuid): self.custom() for attribute in self._output_attributes: attribute.submit(self.uuid)
def create_ui_node(self, parent): y = IncludeNode.levels[self.level] IncludeNode.levels[self.level] += 80 with dpg.node(label=self.name, pos=(250*self.level, y), parent=editor_id): if self.level > 0: with dpg.node_attribute(label=self.name + "-in") as node_from_id: dpg.add_text("from") if len(self.links) > 0: with dpg.node_attribute(label=self.name + "-out", attribute_type=dpg.mvNode_Attr_Output) as node_out_id: dpg.add_text("Includes:") if parent != 0: dpg.add_node_link(parent, node_from_id, parent=editor_id) for i in range(0, len(self.links)): self.links[i].create_ui_node(node_out_id)
def add_rlines(parent): pid = dpg.generate_uuid() with dpg.node(label="Resistance Lines", pos=[10, 10], parent=parent, user_data=ResistanceLinesNode(pid), id=pid): _add_inputs_and_outputs(dpg.get_item_user_data(pid), node_layouts[ResistanceLinesNode]) with dpg.node_attribute(attribute_type=dpg.mvNode_Attr_Static): dpg.add_slider_float(label='threshold', default_value=2, min_value=0.1, max_value=5, callback=lambda s, a, u: dpg. get_item_user_data(pid).update_threshold(a), width=50) dpg.add_slider_int(label='min strength', default_value=0, min_value=0, max_value=50, callback=lambda s, a, u: dpg.get_item_user_data( pid).update_min_strength(a), width=50)
def add_rolling_mean(parent): pid = dpg.generate_uuid() with dpg.node(label="Rolling Mean", pos=[10, 10], parent=parent, user_data=RollingMeanNode(pid), id=pid): _add_inputs_and_outputs(dpg.get_item_user_data(pid), node_layouts[RollingMeanNode]) with dpg.node_attribute(attribute_type=dpg.mvNode_Attr_Static): dpg.add_combo(('SMA', 'EMA'), label='type', default_value='SMA', user_data=pid, callback=lambda s, a, u: dpg.get_item_user_data(pid). update_type(a), width=50) dpg.add_slider_int(label='window size', default_value=7, min_value=3, max_value=200, callback=lambda s, a, u: dpg.get_item_user_data( pid).update_window_size(a), width=50)
def add_history(parent): pid = dpg.generate_uuid() with dpg.node(label="History", pos=[10, 10], parent=parent, user_data=HistoryNode(pid), id=pid): _add_inputs_and_outputs(dpg.get_item_user_data(pid), node_layouts[HistoryNode]) with dpg.node_attribute(attribute_type=dpg.mvNode_Attr_Static): dpg.add_combo(('1y', '6m', '1m', '1w', '1d'), label='period', default_value='1w', user_data=pid, callback=lambda s, a, u: dpg.get_item_user_data(pid). update_period(a), width=50) dpg.add_combo(('1d', '1h', '30m', '15m'), label='interval', default_value='1h', user_data=pid, callback=lambda s, a, u: dpg.get_item_user_data(pid). update_interval(a), width=50)
def setUp(self): dpg.create_context() with dpg.window() as self.window_id: def testy(sender, app, user): print(f"Sender: {dpg.get_item_type(sender)} {sender}, App Data: {app}, User Data:{user}") # Menus with dpg.menu_bar() as menu_bar: dpg.add_menu_item(label="menu item", payload_type="str", drop_callback=testy) with dpg.menu(label="menu", payload_type="str", drop_callback=testy): dpg.add_menu_item(label="menu item") # basic with dpg.collapsing_header(label="basic") as basic: dpg.add_image(dpg.mvFontAtlas) dpg.add_image_button(dpg.mvFontAtlas) dpg.add_text("this is a text widget") dpg.add_checkbox(label="checkbox") dpg.add_button(label="button") dpg.add_input_float(label="input float") dpg.add_input_floatx(label="input floatx") dpg.add_drag_int(label="drag int") dpg.add_drag_intx(label="drag intx") dpg.add_input_text(label="input text") dpg.add_slider_float(label="slider float") dpg.add_slider_floatx(label="slider floatx") dpg.add_listbox(label="listbox") dpg.add_selectable(label="selectable") dpg.add_radio_button(["item 1", "item 2"],label="radio button") # color with dpg.collapsing_header(label="color") as color: with dpg.group() as color: dpg.add_color_button([255,0,0,255]) dpg.add_color_edit([255,0,0,255]) dpg.add_colormap_button(label="Colormap Button 1") dpg.add_color_picker((255, 0, 255, 255), label="Color Picker", width=200) dpg.add_colormap_slider(label="Colormap Slider 1", default_value=0.5, payload_type="str", drop_callback=testy) dpg.add_colormap_scale(label="Colormap Spectral", min_scale=-100, max_scale=150, payload_type="str", drop_callback=testy) # containers with dpg.collapsing_header(label="containers"): with dpg.group() as containers: with dpg.collapsing_header(): btn = dpg.add_button() with dpg.group(width=150): dpg.add_button() with dpg.tree_node(): dpg.add_button() with dpg.child_window(width=150, height=100, payload_type="str", drop_callback=testy): pass # tab stuff with dpg.collapsing_header(label="tab bars"): with dpg.tab_bar(): with dpg.tab(label="tab", payload_type="str", drop_callback=testy): pass dpg.add_tab_button(label="tab button", payload_type="str", drop_callback=testy, drag_callback=testy) with dpg.drag_payload(parent=dpg.last_item(), drop_data="dropped", drag_data="dragged", user_data="user data", payload_type="str"): dpg.add_text(dpg.get_item_type(dpg.last_item())) dpg.add_text(f"Item ID: {dpg.last_item()}") # custom with dpg.collapsing_header(label="custom"): with dpg.group() as custom: dpg.add_date_picker() dpg.add_knob_float() dpg.add_3d_slider() dpg.add_time_picker() dpg.add_loading_indicator(payload_type="str", drop_callback=testy) # misc with dpg.collapsing_header(label="misc"): with dpg.group() as misc: dpg.add_progress_bar(label="progress bar", default_value=.5) # node with dpg.collapsing_header(label="node"): with dpg.node_editor() as node: with dpg.node(pos=[20,20], draggable=False): pass with dpg.node(pos=[100,100], draggable=False): pass # plots with dpg.collapsing_header(label="plot") as plot: with dpg.plot(): dpg.add_plot_legend(payload_type="str", drop_callback=testy) dpg.add_plot_axis(dpg.mvXAxis, label="x", payload_type="str", drop_callback=testy) with dpg.plot_axis(dpg.mvYAxis, label="y", payload_type="str", drop_callback=testy): dpg.add_line_series([0,1,2,3,4,5], [0,1,2,3,4,5], label="data") self.test_bind_items = dpg.get_item_children(basic, slot=1) self.test_bind_items += dpg.get_item_children(color, slot=1) self.test_bind_items += dpg.get_item_children(containers, slot=1) self.test_bind_items += dpg.get_item_children(custom, slot=1) self.test_bind_items += dpg.get_item_children(misc, slot=1) self.test_bind_items += dpg.get_item_children(node, slot=1) self.test_bind_items += dpg.get_item_children(plot, slot=1) dpg.setup_dearpygui()
def spawn_node_on_editor(self): self.context = zmq.Context() self.initialise_parameters_socket() with dpg.node(label=self.name, parent=self.parent, pos=[self.coordinates[0], self.coordinates[1]]) as self.id: colour = choose_color_according_to_operations_type( self.operation.parent_dir) with dpg.theme() as self.theme_id: with dpg.theme_component(0): dpg.add_theme_color(dpg.mvNodeCol_TitleBar, colour, category=dpg.mvThemeCat_Nodes) dpg.add_theme_color(dpg.mvNodeCol_TitleBarSelected, colour, category=dpg.mvThemeCat_Nodes) dpg.add_theme_color(dpg.mvNodeCol_TitleBarHovered, colour, category=dpg.mvThemeCat_Nodes) dpg.add_theme_color(dpg.mvNodeCol_NodeBackgroundSelected, [120, 120, 120, 255], category=dpg.mvThemeCat_Nodes) dpg.add_theme_color(dpg.mvNodeCol_NodeBackground, [70, 70, 70, 255], category=dpg.mvThemeCat_Nodes) dpg.add_theme_color(dpg.mvNodeCol_NodeBackgroundHovered, [80, 80, 80, 255], category=dpg.mvThemeCat_Nodes) dpg.add_theme_color(dpg.mvNodeCol_NodeOutline, [50, 50, 50, 255], category=dpg.mvThemeCat_Nodes) dpg.add_theme_style(dpg.mvNodeStyleVar_NodeBorderThickness, x=4, category=dpg.mvThemeCat_Nodes) dpg.bind_item_theme(self.id, self.theme_id) # Loop through all the attributes defined in the operation (as seen in the *_com.py file) and put them on # the node same_line_widget_ids = [] for i, attr in enumerate(self.operation.attributes): if self.operation.attribute_types[i] == 'Input': attribute_type = dpg.mvNode_Attr_Input elif self.operation.attribute_types[i] == 'Output': attribute_type = dpg.mvNode_Attr_Output elif self.operation.attribute_types[i] == 'Static': attribute_type = dpg.mvNode_Attr_Static attribute_name = attr + '##{}##{}'.format( self.operation.name, self.node_index) with dpg.node_attribute(label=attribute_name, parent=self.id, attribute_type=attribute_type): if attribute_type == 1: dpg.add_spacer() dpg.add_text(label='##' + attr + ' Name{}##{}'.format( self.operation.name, self.node_index), default_value=attr) if 'Parameters' in attr: for k, parameter in enumerate( self.operation.parameters): if self.operation.parameter_types[k] == 'int': id = dpg.add_input_int( label='{}##{}'.format( parameter, attribute_name), default_value=self.node_parameters[k], callback=self.update_parameters, width=100, min_clamped=False, max_clamped=False, min_value=int(-1e8), max_value=int(1e8), on_enter=True) elif self.operation.parameter_types[k] == 'str': id = dpg.add_input_text( label='{}##{}'.format( parameter, attribute_name), default_value=self.node_parameters[k], callback=self.update_parameters, width=100, on_enter=True) elif self.operation.parameter_types[k] == 'float': id = dpg.add_input_float( label='{}##{}'.format( parameter, attribute_name), default_value=self.node_parameters[k], callback=self.update_parameters, width=100, min_clamped=False, max_clamped=False, min_value=-1e10, max_value=1e10, on_enter=True) elif self.operation.parameter_types[k] == 'bool': id = dpg.add_checkbox( label='{}##{}'.format( parameter, attribute_name), default_value=self.node_parameters[k], callback=self.update_parameters) elif self.operation.parameter_types[k] == 'list': default_value = self.node_parameters[k][0] if type(self.node_parameters[k]) == str: default_value = self.node_parameters[k] id = dpg.add_combo( label='{}##{}'.format( parameter, attribute_name), items=self.node_parameters_combos_items[k], default_value=default_value, callback=self.update_parameters, width=100) self.parameter_inputs_ids[parameter] = id dpg.add_spacer(label='##Spacing##' + attribute_name, indent=3) # Add the extra input button with its popup window for extra inputs like ssh and verbosity self.extra_input_window()