示例#1
0
def delete_link(sender, link):
    """
    Deletes a link and removes the topics (in and out) it represents from the corresponding nodes
    :param sender: Not used
    :param link: The id of the link item
    :return: Nothing
    """
    global links_dict

    link_conf = dpg.get_item_configuration(link)
    output_node = link_conf['user_data']['node_id_out']
    input_node = link_conf['user_data']['node_id_in']
    topic_out = link_conf['user_data']['topic_out']
    topic_in = link_conf['user_data']['topic_in'].replace(' ', '_')

    del links_dict[topic_out.split('-')[0]]

    topic_out = topic_out.replace(' ', '_')

    for n in nodes_list:
        if output_node == n.id:
            n.remove_topic_out(topic_out)
            n.links_list.remove(link)
        if input_node == n.id:
            n.remove_topic_in(topic_in)
            n.links_list.remove(link)
    dpg.delete_item(link)
示例#2
0
def on_end_graph(sender, data):
    """
    Kill all running processes (except the one running the gui). Also shows a progress bar while waiting for processes
    to die. They need a ct.HEARTBEAT_RATE * ct.HEARTBEATS_TO_DEATH seconds to die.
    :param sender: Not used
    :param data: Not used
    :return: Nothing
    """
    global forwarders

    for n in nodes_list:
        n.stop_com_process()

    if platform.system() == 'Windows':
        forwarders.send_signal(signal.CTRL_BREAK_EVENT)
    elif platform.system() == 'Linux':
        forwarders.terminate()

    with dpg.window(label='Progress bar', pos=[500, 400], width=400, height=80) as progress_bar:
        killing_proc_bar = dpg.add_progress_bar(label='Killing processes', parent=progress_bar, width=400, height=40,
                                                overlay='Closing worker_exec processes')
        t = 0
        while t < ct.HEARTBEAT_RATE * ct.HEARTBEATS_TO_DEATH:
            dpg.set_value(killing_proc_bar, t / (ct.HEARTBEAT_RATE * ct.HEARTBEATS_TO_DEATH))
            t = t + 0.1
            time.sleep(0.1)
        dpg.delete_item(killing_proc_bar)
    update_control_graph_buttons(False)
    dpg.delete_item(progress_bar)

    forwarders.kill()
    del forwarders
示例#3
0
def update():
    global _text, _cell
    dpg.delete_item(_text)

    _text = dpg.add_text(
        parent=_cell,
        default_value=f"hiiiiiiii {np.random.randint(324214234)}")
示例#4
0
    def update_internal(self) -> bool:
        # remove text
        if self.text_id != 0:
            dpg.delete_item(self.text_id)
            self.text_id = 0

        if self.dealer is None or self.symbols is None:
            return True

        if not self.dealer.good() or not self.symbols.good():
            return True

        self.current_prices = self.dealer.binance.symbol_ticker(
            self.symbols.symbols)

        # add plot if needed
        if self.text_id == 0:
            self.text_id = dpg.add_node_attribute(
                parent=self.node_id, attribute_type=dpg.mvNode_Attr_Static)
            for s in self.current_prices:
                dpg.add_text(
                    s + ' R$ %.2f' % float(self.current_prices[s].current),
                    parent=self.text_id)

        return True
示例#5
0
 def remove_from_editor(self):
     dpg.remove_alias('verb#{}#{}'.format(self.operation.name,
                                          self.node_index))
     if dpg.does_alias_exist('relic#{}#{}'.format(self.operation.name,
                                                  self.node_index)):
         dpg.remove_alias('relic#{}#{}'.format(self.operation.name,
                                               self.node_index))
     dpg.delete_item(self.id)
示例#6
0
    def update(self):

        with dpg.mutex():
            dpg.delete_item(self.left_panel, children_only=True)
            self.data_set_container.submit(self.left_panel)
            self.modifier_container.submit(self.left_panel)

            dpg.delete_item(self.right_panel, children_only=True)
            self.inspector_container.submit(self.right_panel)
            self.tool_container.submit(self.right_panel)
示例#7
0
def clear_editor():
    """
    Clear the editor of all nodes and links
    :return: Nothing
    """
    global nodes_list
    if dpg.get_item_children(node_editor, slot=1):
        for n in dpg.get_item_children(node_editor, slot=1):
            dpg.delete_item(n)
        for a in dpg.get_aliases():
            dpg.remove_alias(a)
    nodes_list = []
示例#8
0
def callback(sender):
    dpg.delete_item(editor_id, children_only=True)
    IncludeNode.count = 0
    IncludeNode.level = 0
    IncludeNode.levels = {0: 0}

    if sender is not None:
        selection = dpg.get_value(sender)
        file = selection
    else:
        file = IncludeNode.root

    inode = IncludeNode(file, 0)
    inode.start_tree()
示例#9
0
def add_rsi_series(iw, ws, dates, ta, parent):
    values = ta.rsi(iw, ws)
    dpg.add_line_series(dates, values, label='RSI', parent=parent)
    dpg.add_button(label="Delete Series",
                   user_data=dpg.last_item(),
                   parent=dpg.last_item(),
                   callback=lambda s, a, u: dpg.delete_item(u))
示例#10
0
    def delete_selected_rows(self):
        sel_rows = []

        for row in range(self.num_of_rows):
            if dpg.get_value(self.rows_ids[f"##{self.name}_{row}_{0}"]):
                sel_rows.append(row)

        for row in sel_rows:
            id = dpg.get_value(self.rows_ids[f"##{self.name}_{row}_{1}"])
            del self.ssh_info[id]

        for row in sel_rows:
            dpg.delete_item(self.rows_ids[f"##{self.name}_{row}_sep"])
            for col in range(len(self.header)):
                dpg.delete_item(self.rows_ids[f"##{self.name}_{row}_{col}"])

        self.save_to_json()
示例#11
0
    def update_internal(self) -> bool:
        if self.text_id:
            dpg.delete_item(self.text_id)
            self.text_id = 0

        if self.a is None or self.b is None:
            return True

        if not self.a.good() or not self.b.good():
            return True

        def get_values(data):
            values = {}
            if type(data) is CurrentPriceNode:
                for s in data.current_prices:
                    values[s] = float(data.current_prices[s].current)
            elif type(data) is RollingMeanNode:
                for s in data.data:
                    values[s] = float(data.data[s].to_list()[-1])
            return values

        a_values = get_values(self.a)
        b_values = get_values(self.b)

        self.data = {}
        self.data_pct = {}
        for a in a_values:
            if a in b_values:
                self.data[a] = b_values[a] - a_values[a]
                self.data_pct[a] = b_values[a] / a_values[a]

        if self.text_id == 0:
            self.text_id = dpg.add_node_attribute(
                parent=self.node_id, attribute_type=dpg.mvNode_Attr_Static)
            for s in self.data:
                dpg.add_text('a = %.2f' % a_values[s], parent=self.text_id)
                dpg.add_text('b = %.2f' % b_values[s], parent=self.text_id)
                dpg.add_text('b - a = %.2f' % self.data[s],
                             parent=self.text_id)
                dpg.add_text('a -> b = %.2f%%' %
                             ((self.data_pct[s] - 1) * 100),
                             parent=self.text_id)
                break
        return True
示例#12
0
    def update_internal(self) -> bool:
        if self.data_id:
            dpg.delete_item(self.data_id)
            self.data_id = 0

        if self.series is None or self.reference_prices is None:
            return True
        if not self.series.good() or not self.reference_prices.good():
            return True

        self.data['res'] = {}
        self.data['sup'] = {}

        for s in self.series.symbols.symbols:
            self.data['res'][s] = self.series.prices[s][
                'ta'].resistance_lines_for_price(
                    float(self.reference_prices.current_prices[s].current),
                    self.min_strength, self.threshold)
            self.data['sup'][s] = self.series.prices[s][
                'ta'].support_lines_for_price(
                    float(self.reference_prices.current_prices[s].current),
                    self.min_strength, self.threshold)

        if self.data_id == 0:
            self.data_id = dpg.add_node_attribute(
                parent=self.node_id, attribute_type=dpg.mvNode_Attr_Static)
            for s in self.data['res']:
                dpg.add_text('%s %d res lines' % (s, len(self.data['res'][s])),
                             parent=self.data_id)
                if len(self.data['res'][s]):
                    dpg.add_text(
                        'closest %.2f (%d)' %
                        (self.data['res'][s][0][0], self.data['res'][s][0][1]),
                        parent=self.data_id)

                dpg.add_text('%s %d sup lines' % (s, len(self.data['sup'][s])),
                             parent=self.data_id)
                if len(self.data['sup'][s]):
                    dpg.add_text(
                        'closest %.2f (%d)' %
                        (self.data['sup'][s][0][0], self.data['sup'][s][0][1]),
                        parent=self.data_id)

        return True
示例#13
0
    def update_internal(self) -> bool:
        # remove plot
        if self.plot_id != 0:
            dpg.delete_item(self.plot_id)
            self.plot_id = 0

        if self.dealer is None or self.symbols is None:
            return True

        start_date = datetime(year=2021, month=6, day=29)
        end_date = datetime(year=2021, month=6, day=30)

        if self.period == '1y':
            start_date = end_date - timedelta(days=365)
        elif self.period == '6m':
            start_date = end_date - timedelta(days=182)
        elif self.period == '1m':
            start_date = end_date - timedelta(days=30)
        elif self.period == '1w':
            start_date = end_date - timedelta(days=7)
        elif self.period == '1d':
            start_date = end_date - timedelta(days=1)

        if self.period == '1y' or self.period == '6m' or self.period == '1m':
            if self.interval == '15m' or self.interval == '30m':
                print('changing interval to 1h')
                self.interval = '1h'

        self.prices = self.dealer.binance.historical_candle_series(
            self.symbols.symbols, start_date, end_date, self.interval)
        # add plot if needed
        if self.plot_id == 0:
            data = self.prices[
                self.symbols.symbols[0]]['ta'].data['close'].to_list()
            self.plot_id = dpg.add_node_attribute(
                parent=self.node_id, attribute_type=dpg.mvNode_Attr_Static)
            dpg.add_simple_plot(label='',
                                default_value=data,
                                parent=dpg.last_item(),
                                width=110,
                                height=70)

        return True
示例#14
0
 def show_history_messages(self, history: History):
     dpg.delete_item(MESSAGE_GROUP, children_only=True)
     width = dpg.get_item_width(MESSAGE_GROUP)
     for message in history.messages:
         if message.is_sent_by_me():
             dpg.add_text(
                 message.as_string(),
                 parent=MESSAGE_GROUP,
                 indent=MESSAGE_INDENT,
                 wrap=width - MESSAGE_INDENT,
                 color=COLOR_MESSAGE_OTHERS,
             )
         else:
             dpg.add_text(
                 message.as_string(),
                 parent=MESSAGE_GROUP,
                 indent=0,
                 wrap=width - MESSAGE_INDENT,
                 color=COLOR_MESSAGE_ME,
             )
def __read_csv_cars__():
    if dpg.does_alias_exist(TABLE_TAG):
        dpg.delete_item(TABLE_TAG, children_only=False)
    if dpg.does_alias_exist(TABLE_TAG):
        dpg.remove_alias(TABLE_TAG)
    with dpg.table(header_row=True, resizable=True, tag=TABLE_TAG, parent=MAIN_WINDOW_TAG):
        with open(dpg.get_value(READ_FILENAME_FIELD)) as f:
            csv_reader = csv.reader(f, delimiter=',')
            # f'Table of {f.name}'
            for num, row in enumerate(csv_reader):
                if num == 0:
                    for column in row:
                        dpg.add_table_column(label=column, parent=TABLE_TAG)
                else:
                    with dpg.table_row(parent=TABLE_TAG):
                        for column in row:
                            dpg.add_text(column)
                    if num % 100 == 0:
                        dpg.set_value(value=f'Loaded so far: {num:,}', item=LOADED_FIELD)
            dpg.set_value(value=f'Loaded ALL', item=LOADED_FIELD)
示例#16
0
def add_ema_series(n, dates, parent, ta):
    ema_dates = dates[n - 1:]
    ema_values = ta.ema(n).to_list()[n - 1:]
    dpg.add_line_series(ema_dates,
                        ema_values,
                        label='EMA-' + str(n),
                        parent=parent)
    dpg.add_button(label="Delete Series",
                   user_data=dpg.last_item(),
                   parent=dpg.last_item(),
                   callback=lambda s, a, u: dpg.delete_item(u))
示例#17
0
文件: Logger.py 项目: mugen8085/Bonus
    def __init__(self, parent=None):

        self.log_level = 0
        self._auto_scroll = True
        self.filter_id = None
        if parent:
            self.window_id = parent
        else:
            self.window_id = dpg.add_window(label="mvLogger",
                                            pos=(10, 150),
                                            width=800,
                                            height=200)
        self.count = 0
        self.flush_count = 1000

        with dpg.group(horizontal=True, parent=self.window_id):
            dpg.add_checkbox(label="Auto-scroll",
                             default_value=True,
                             callback=lambda sender: self.auto_scroll(
                                 dpg.get_value(sender)))
            dpg.add_button(label="Clear",
                           callback=lambda: dpg.delete_item(
                               self.filter_id, children_only=True))

        dpg.add_input_text(label="Filter",
                           callback=lambda sender: dpg.set_value(
                               self.filter_id, dpg.get_value(sender)),
                           parent=self.window_id)
        self.child_id = dpg.add_child(parent=self.window_id,
                                      autosize_x=True,
                                      autosize_y=True)
        self.filter_id = dpg.add_filter_set(parent=self.child_id)

        with dpg.theme() as self.trace_theme:
            dpg.add_theme_color(dpg.mvThemeCol_Text, (0, 255, 0, 255))

        with dpg.theme() as self.debug_theme:
            dpg.add_theme_color(dpg.mvThemeCol_Text, (64, 128, 255, 255))

        with dpg.theme() as self.info_theme:
            dpg.add_theme_color(dpg.mvThemeCol_Text, (255, 255, 255, 255))

        with dpg.theme() as self.warning_theme:
            dpg.add_theme_color(dpg.mvThemeCol_Text, (255, 255, 0, 255))

        with dpg.theme() as self.error_theme:
            dpg.add_theme_color(dpg.mvThemeCol_Text, (255, 0, 0, 255))

        with dpg.theme() as self.critical_theme:
            dpg.add_theme_color(dpg.mvThemeCol_Text, (255, 0, 0, 255))
示例#18
0
    def update_internal(self) -> bool:
        # remove plot
        if self.plot_id != 0:
            dpg.delete_item(self.plot_id)
            self.plot_id = 0

        if self.series is None or not self.series.good():
            return True

        if len(self.series.prices) == 0:
            return True

        plot_symbol = ''
        w = 0
        for s in self.series.symbols.symbols:
            plot_symbol = s
            w = min([len(self.series.prices[s]['ta'].data), self.window_size])
            if self.mean_type == 'SMA':
                self.data[s] = self.series.prices[s]['ta'].sma(w)
            elif self.mean_type == 'EMA':
                self.data[s] = self.series.prices[s]['ta'].ema(w)

        if w == 0 or len(plot_symbol) == 0:
            return True

        # add plot if needed
        if self.plot_id == 0:
            self.plot_id = dpg.add_node_attribute(
                parent=self.node_id, attribute_type=dpg.mvNode_Attr_Static)
            dpg.add_simple_plot(
                label='',
                default_value=self.data[plot_symbol].to_list()[w - 1:],
                parent=dpg.last_item(),
                width=110,
                height=70)

        return True
示例#19
0
 def delete_error_popup_aliases():
     if dpg.does_alias_exist('modal_error_id'):
         dpg.delete_item('modal_error_id')
     if dpg.does_alias_exist("modal_id_credentials"):
         dpg.delete_item("modal_id_credentials")
         print('killed creds window')
     if dpg.does_alias_exist("modal_id_folders_not_found"):
         dpg.delete_item("modal_id_folders_not_found")
         print('killed wrong folder window')
示例#20
0
文件: main.py 项目: filipecn/maldives
def _candle_plot_drop(sender, app_data, user_data):
    global prices
    global window_data

    if window_data.selected_ticker == '':
        return

    ta = prices[window_data.selected_ticker]['ta']
    dates = (ta.data['date'].astype('int64') // 1e9).to_list()

    # indicator comes in app_data
    logger.log('adding indicator ' + app_data[0])
    if app_data[0] == 'RLINES':
        current_price = float(exchange.symbol_ticker(window_data.selected_ticker)[window_data.selected_ticker].current)
        threshold = dpg.get_value(app_data[1]) / 100
        min_strength = dpg.get_value(app_data[2])
        resistance_lines = ta.resistance_lines_for_price(current_price, min_strength, threshold)
        resistance_levels = [v[0] for v in resistance_lines]
        resistance_strengths = [v[1] for v in resistance_lines]
        resistance_lines = ta.support_lines_for_price(current_price, min_strength, threshold)
        resistance_levels += [v[0] for v in resistance_lines]
        resistance_strengths += [v[1] for v in resistance_lines]
        logger.log(str(resistance_levels))
        hlid = dpg.add_hline_series(resistance_levels, label='RLINES', parent=window_data.candle_yaxis)

        def delete_hl_series(s, a, u):
            dpg.delete_item(u)
            for an in window_data.rlines_annotation_ids[u]:
                dpg.delete_item(an)
            window_data.rlines_annotation_ids[u] = []

        dpg.add_button(label="Delete", user_data=dpg.last_item(), parent=dpg.last_item(),
                       callback=delete_hl_series)
        window_data.rlines_annotation_ids[hlid] = []
        # add annotations
        for ri in range(len(resistance_levels)):
            dpg.add_plot_annotation(label=str(resistance_strengths[ri]),
                                    default_value=(dates[-1], resistance_levels[ri]), offset=(10, 0),
                                    clamped=False, parent=window_data.candle_plot)
            window_data.rlines_annotation_ids[hlid].append(dpg.last_item())
    elif app_data[0] == 'SMA':
        indicators.add_sma_series(app_data[1], dates, window_data.candle_yaxis, ta)
    elif app_data[0] == 'EMA':
        indicators.add_ema_series(app_data[1], dates, window_data.candle_yaxis, ta)
    elif app_data[0] == 'BOLLINGER_BANDS':
        indicators.add_bbands_series(app_data[1], app_data[2], dates, ta, window_data.candle_yaxis)

    dpg.add_button(label="Delete", user_data=dpg.last_item(), parent=dpg.last_item(),
                   callback=lambda s, a, u: dpg.delete_item(u))
示例#21
0
def add_bbands_series(w, s, dates, ta, parent):
    values = ta.bollinger_bands(w, s)
    bbdates = dates[w - 1:]
    upper_band = values[1].to_list()[w - 1:]
    lower_band = values[2].to_list()[w - 1:]
    with dpg.theme() as b_theme:
        dpg.add_theme_color(dpg.mvPlotCol_Fill, (100, 100, 150, 64),
                            category=dpg.mvThemeCat_Plots)
    dpg.add_shade_series(bbdates,
                         upper_band,
                         y2=lower_band,
                         label="BBANDS",
                         parent=parent)
    dpg.set_item_theme(dpg.last_item(), b_theme)
    dpg.add_button(label="Delete Series",
                   user_data=dpg.last_item(),
                   parent=dpg.last_item(),
                   callback=lambda s, a, u: dpg.delete_item(u))
示例#22
0
 def init(self, parent):
     self.window_id = parent
     with dpg.group(horizontal=True, parent=self.window_id):
         dpg.add_checkbox(label="Auto-scroll",
                          default_value=True,
                          callback=lambda sender: self.auto_scroll(
                              dpg.get_value(sender)))
         dpg.add_same_line()
         dpg.add_button(label="Clear",
                        callback=lambda: dpg.delete_item(
                            self.filter_id, children_only=True))
         dpg.add_same_line()
         dpg.add_input_text(label="Filter",
                            callback=lambda sender: dpg.set_value(
                                self.filter_id, dpg.get_value(sender)))
     self.child_id = dpg.add_child(parent=self.window_id,
                                   autosize_x=True,
                                   autosize_y=True)
     self.filter_id = dpg.add_filter_set(parent=self.child_id)
示例#23
0
    def __init__(self):

        self.log_level = 0
        self._auto_scroll = True
        self.filter_id = None
        self.window_id = dpg.add_window(label="mvLogger", pos=(200, 200), width=500, height=500)
        self.count = 0
        self.flush_count = 1000
        self.level_options = {"Trace": 0, "Debug": 1, "Info": 2,  "Warning": 3, "Error": 4, "Critical": 5}

        with dpg.group(horizontal=True, parent=self.window_id):
            dpg.add_checkbox(label="Auto-scroll", default_value=True,
                             callback=lambda sender: self.auto_scroll(dpg.get_value(sender)))
            dpg.add_button(label="Clear", callback=lambda: dpg.delete_item(self.filter_id, children_only=True))
        dpg.add_input_text(label="Filter", callback=lambda sender: dpg.set_value(self.filter_id, dpg.get_value(sender)),
                           parent=self.window_id)
        dpg.add_radio_button(list(self.level_options.keys()), parent=self.window_id,
                             callback=lambda sender: self.set_level(self.level_options[dpg.get_value(sender)]))
        dpg.add_same_line(parent=self.window_id)
        self.child_id = dpg.add_child(parent=self.window_id, autosize_x=True, autosize_y=True)
        self.filter_id = dpg.add_filter_set(parent=self.child_id)

        with dpg.theme() as self.trace_theme:
            dpg.add_theme_color(dpg.mvThemeCol_Text, (0, 255, 0, 255))

        with dpg.theme() as self.debug_theme:
            dpg.add_theme_color(dpg.mvThemeCol_Text, (64, 128, 255, 255))

        with dpg.theme() as self.info_theme:
            dpg.add_theme_color(dpg.mvThemeCol_Text, (255, 255, 255, 255))

        with dpg.theme() as self.warning_theme:
            dpg.add_theme_color(dpg.mvThemeCol_Text, (255, 255, 0, 255))

        with dpg.theme() as self.error_theme:
            dpg.add_theme_color(dpg.mvThemeCol_Text, (255, 0, 0, 255))

        with dpg.theme() as self.critical_theme:
            dpg.add_theme_color(dpg.mvThemeCol_Text, (255, 0, 0, 255))
示例#24
0
    def start(self):

        dpg.setup_registries()
        dpg.setup_viewport()
        dpg.set_viewport_title("Simple Data Flow")
        node_editor = NodeEditor()

        with dpg.window() as main_window:

            with dpg.menu_bar():

                with dpg.menu(label="Operations"):

                    dpg.add_menu_item(label="Reset", callback=lambda: dpg.delete_item(node_editor.uuid, children_only=True))

                with dpg.menu(label="Plugins"):
                    for plugin in self.plugins:
                        dpg.add_menu_item(label=plugin[0], callback=plugin[1])

            with dpg.group(horizontal=True) as group:

                # left panel
                with dpg.group(id=self.left_panel):
                    self.data_set_container.submit(self.left_panel)
                    self.modifier_container.submit(self.left_panel)

                # center panel
                node_editor.submit(group)

                # right panel
                with dpg.group(id=self.right_panel):
                    self.inspector_container.submit(self.right_panel)
                    self.tool_container.submit(self.right_panel)

        dpg.set_primary_window(main_window, True)
        dpg.start_dearpygui()
示例#25
0
def configure_pygui(renderer, widgets, update=True):
    if not dearpygui_imported:
        raise RuntimeError(
            "Attempted to use DearPyGUI when it isn't imported.")
    if update:
        dpg.delete_item(window)
    else:
        dpg.setup_viewport()
    dpg.set_viewport_title(title=f"Manim Community v{__version__}")
    dpg.set_viewport_width(1015)
    dpg.set_viewport_height(540)

    def rerun_callback(sender, data):
        renderer.scene.queue.put(("rerun_gui", [], {}))

    def continue_callback(sender, data):
        renderer.scene.queue.put(("exit_gui", [], {}))

    def scene_selection_callback(sender, data):
        config["scene_names"] = (dpg.get_value(sender), )
        renderer.scene.queue.put(("rerun_gui", [], {}))

    scene_classes = scene_classes_from_file(Path(config["input_file"]),
                                            full_list=True)
    scene_names = [scene_class.__name__ for scene_class in scene_classes]

    with dpg.window(
            id=window,
            label="Manim GUI",
            pos=[config["gui_location"][0], config["gui_location"][1]],
            width=1000,
            height=500,
    ):
        dpg.set_global_font_scale(2)
        dpg.add_button(label="Rerun", callback=rerun_callback)
        dpg.add_button(label="Continue", callback=continue_callback)
        dpg.add_combo(
            label="Selected scene",
            items=scene_names,
            callback=scene_selection_callback,
            default_value=config["scene_names"][0],
        )
        dpg.add_separator()
        if len(widgets) != 0:
            with dpg.collapsing_header(
                    label=f"{config['scene_names'][0]} widgets",
                    default_open=True):
                for widget_config in widgets:
                    widget_config_copy = widget_config.copy()
                    name = widget_config_copy["name"]
                    widget = widget_config_copy["widget"]
                    if widget != "separator":
                        del widget_config_copy["name"]
                        del widget_config_copy["widget"]
                        getattr(dpg, f"add_{widget}")(name,
                                                      **widget_config_copy)
                    else:
                        dpg.add_separator()

    if not update:
        dpg.start_dearpygui()
示例#26
0
文件: main.py 项目: filipecn/maldives
def _ticker_drop(sender, app_data, user_data):
    global window_data
    global prices

    # update data
    window_data.selected_ticker = app_data

    if app_data == '':
        return

    dpg.set_value(window_data.main_window_title, 'Ticker: ' + window_data.selected_ticker)

    # clean plots
    for i in dpg.get_item_children(window_data.candle_yaxis)[1]:
        dpg.delete_item(i)
    if window_data.volume_unit_yaxis != 0:
        dpg.delete_item(window_data.volume_unit_yaxis)
    for i in dpg.get_item_children(window_data.volume_yaxis)[1]:
        dpg.delete_item(i)

    # load data
    start_date = datetime(year=2021, month=6, day=29)
    end_date = datetime(year=2021, month=6, day=30)

    end_date = datetime.now()
    start_date = end_date - timedelta(days=7)

    if window_data.period == '1y':
        start_date = end_date - timedelta(days=365)
    elif window_data.period == '6m':
        start_date = end_date - timedelta(days=182)
    elif window_data.period == '1m':
        start_date = end_date - timedelta(days=30)
    elif window_data.period == '1w':
        start_date = end_date - timedelta(days=7)
    elif window_data.period == '1d':
        start_date = end_date - timedelta(days=1)

    # current price
    window_data.current_price = float(
        exchange.symbol_ticker(window_data.selected_ticker)[window_data.selected_ticker].current)
    # candle history
    prices = exchange.historical_candle_series([window_data.selected_ticker], start_date, end_date,
                                               window_data.interval)

    # compute ticker data
    new_dates = (prices[window_data.selected_ticker]['ta'].data['date'].astype('int64') // 1e9).to_list()
    new_closes = prices[window_data.selected_ticker]['ta'].data['close'].to_list()
    new_lows = prices[window_data.selected_ticker]['ta'].data['low'].to_list()
    new_highs = prices[window_data.selected_ticker]['ta'].data['high'].to_list()
    new_opens = prices[window_data.selected_ticker]['ta'].data['open'].to_list()
    # create candle stick graph
    dpg.add_candle_series(new_dates, new_opens, new_closes, new_lows, new_highs,
                          label=app_data,
                          parent=window_data.candle_yaxis)

    dpg.add_hline_series([window_data.current_price], label='cur price', parent=window_data.candle_yaxis)

    # add indicators
    indicators.add_sma_series(3, new_dates, window_data.candle_yaxis,
                              prices[window_data.selected_ticker]['ta'])
    indicators.add_sma_series(7, new_dates, window_data.candle_yaxis,
                              prices[window_data.selected_ticker]['ta'])
    indicators.add_sma_series(14, new_dates, window_data.candle_yaxis,
                              prices[window_data.selected_ticker]['ta'])
    # create volume graph
    values = prices[window_data.selected_ticker]['ta'].data['volume'].to_list()
    dpg.add_bar_series(new_dates, values, parent=window_data.volume_yaxis, weight=500)

    # fit plot views
    dpg.fit_axis_data(window_data.candle_xaxis)
    dpg.fit_axis_data(window_data.candle_yaxis)
    dpg.fit_axis_data(window_data.volume_yaxis)
    dpg.fit_axis_data(window_data.volume_xaxis)
示例#27
0
文件: main.py 项目: filipecn/maldives
def _delink_node(sender, app_data, user_data):
    nodes.disconnect(dpg.get_item_user_data(app_data)[0], dpg.get_item_user_data(app_data)[1])
    dpg.delete_item(app_data)
示例#28
0
文件: main.py 项目: filipecn/maldives
 def delete_hl_series(s, a, u):
     dpg.delete_item(u)
     for an in window_data.rlines_annotation_ids[u]:
         dpg.delete_item(an)
     window_data.rlines_annotation_ids[u] = []
示例#29
0
 def clear_log(self):
     dpg.delete_item(self.filter_id, children_only=True)
     self.count = 0
示例#30
0
def on_close():
    global ssh_table
    ssh_table.save_to_json()
    dpg.delete_item(ssh_table.id)