From f607809de571415fe8533eac2cdb3bc34a2797cb Mon Sep 17 00:00:00 2001 From: my1e5 <10064103+my1e5@users.noreply.github.com> Date: Mon, 13 Mar 2023 14:35:37 +0000 Subject: [PATCH] main : refactor repo structure so examples are organised into folders --- .gitignore | 1 + README.md | 65 +++++++++++++++++-- data_binding/data_binding_with_dict.py | 49 ++++++++++++++ data_binding/data_binding_with_list.py | 37 +++++++++++ {examples => drawing}/simple_paint.py | 0 {examples => listbox}/listbox_custom.py | 0 {examples => listbox}/listbox_key_press.py | 0 {examples => misc}/print_from_pdf_viewer.py | 0 .../persistance_of_windows.py | 0 .../persistance_using_dataclasses.py | 0 .../persistance_using_dict.py | 0 {examples => plots}/plot_enforce_limits.py | 0 .../plot_update_line_colour.py | 0 .../plot_update_marker_size.py | 0 .../get_item_size_on_startup.py | 0 .../resize_button_with_viewport.py | 0 {examples => sizing}/resize_child_window.py | 0 .../spacing_using_auto_align.py | 0 .../spacing_using_child_window_grid.py | 0 {examples => spacing}/spacing_using_tables.py | 0 {examples => threading}/progress_bar.py | 0 .../start_stop_button_basic.py | 0 .../start_stop_button_class.py | 0 .../child_window_clicked_handler.py | 0 {examples => window}/drag_menu_bar.py | 0 .../restrict_window_position.py | 0 {examples => window}/window_always_on_top.py | 0 27 files changed, 145 insertions(+), 7 deletions(-) create mode 100644 data_binding/data_binding_with_dict.py create mode 100644 data_binding/data_binding_with_list.py rename {examples => drawing}/simple_paint.py (100%) rename {examples => listbox}/listbox_custom.py (100%) rename {examples => listbox}/listbox_key_press.py (100%) rename {examples => misc}/print_from_pdf_viewer.py (100%) rename {examples => persistance}/persistance_of_windows.py (100%) rename {examples => persistance}/persistance_using_dataclasses.py (100%) rename {examples => persistance}/persistance_using_dict.py (100%) rename {examples => plots}/plot_enforce_limits.py (100%) rename {examples => plots}/plot_update_line_colour.py (100%) rename {examples => plots}/plot_update_marker_size.py (100%) rename {examples => sizing}/get_item_size_on_startup.py (100%) rename {examples => sizing}/resize_button_with_viewport.py (100%) rename {examples => sizing}/resize_child_window.py (100%) rename {examples => spacing}/spacing_using_auto_align.py (100%) rename {examples => spacing}/spacing_using_child_window_grid.py (100%) rename {examples => spacing}/spacing_using_tables.py (100%) rename {examples => threading}/progress_bar.py (100%) rename {examples => threading}/start_stop_button_basic.py (100%) rename {examples => threading}/start_stop_button_class.py (100%) rename {examples => window}/child_window_clicked_handler.py (100%) rename {examples => window}/drag_menu_bar.py (100%) rename {examples => window}/restrict_window_position.py (100%) rename {examples => window}/window_always_on_top.py (100%) diff --git a/.gitignore b/.gitignore index c1f4794..d87f485 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ wip +.vscode # Byte-compiled / optimized / DLL files __pycache__/ diff --git a/README.md b/README.md index d19de79..fd3ce2a 100644 --- a/README.md +++ b/README.md @@ -1,19 +1,70 @@ # DearPyGui examples -A collection of example scripts which demonstrate various features/functionality in DearPyGui +A collection of example scripts which demonstrate various features/functionality in DearPyGui. ## Examples -- [Progress bar](#progress-bar) -- [Simple paint](#simple-paint) +- [Data binding](#data-binding) +- [Drawing]() + - [Simple paint](#simple-paint) +- [Listbox] +- [Misc] +- [Persistance] +- [Plots] +- [Sizing] +- [Spacing] +- [Threading] + - [Progress bar](#progress-bar) +- [Window] -### Progress bar -A basic progress bar with a start button. Once running, the start button changes to a pause button. The task can then be paused, upon which the pause button changes to a resume button and a reset button appears. +## Data binding -![Progress bar](assets/gifs/progress_bar.gif) +Examples of how to link a data structure to GUI items so that changes made using the GUI are reflected in the underlying data structure. + +## Drawing + +Examples of how to use the drawing API. ### Simple paint A very simple implementation of a paint app. It demonstrates how you can click and drag the mouse on a `dpg.add_drawlist` and draw basic free-form lines using `dpg.draw_line`. -![Simple paint](assets/gifs/simple_paint.gif) \ No newline at end of file +![Simple paint](assets/gifs/simple_paint.gif) + +## Listbox + +Examples of custom listbox widgets which extend the functionality of the default listbox. Includes how to implement a listbox which is unselected by default and how to respond to key presses. + +## Misc + +Miscellaneous examples. + +## Persistance + +Examples of how to save and load the state of a GUI. This includes the values of GUI items, the position of windows, etc. A simple example using `dict` is shown as well as a more advanced example using `dataclasses`. + +## Plots + +Examples of how to implement various features in plots. Such as enforcing axes limits and updating colours and marker styles. + +## Sizing + +Examples of how to size/re-size GUI items. There are some quirks with sizing - mainly to do with getting the correct size of an item on startup. + +## Spacing + +Examples of how to space GUI items using different methods. This includes automatic spacing, spacing using a grid of child windows and spacing using tables. + +## Threading + +Examples of how to use threading in DearPyGui. Includes a start/stop button which can be used to start/stop a thread and a progress bar to show the progress of a task. + +### Progress bar + +A basic progress bar with a start button. Once running, the start button changes to a pause button. The task can then be paused, upon which the pause button changes to a resume button and a reset button appears. + +![Progress bar](assets/gifs/progress_bar.gif) + +## Window + +Examples of how to manage windows. This includes how to create a window which is always on top and how to drag the viewport when `decorated=False`. Also includes restricting the position of a window and how to implement a clicked handler for child windows. diff --git a/data_binding/data_binding_with_dict.py b/data_binding/data_binding_with_dict.py new file mode 100644 index 0000000..a9f193d --- /dev/null +++ b/data_binding/data_binding_with_dict.py @@ -0,0 +1,49 @@ +import dearpygui.dearpygui as dpg +dpg.create_context() + +numbers = { + dpg.generate_uuid(): 0, + dpg.generate_uuid(): 0, + dpg.generate_uuid(): 0, + dpg.generate_uuid(): 0, +} + + +def update(_, app_data, user_data): + numbers[user_data] = app_data + +def remove(_, app_data, user_data): + if len(numbers) > 1: + del numbers[user_data] + dpg.delete_item(user_data) + +def add(_, app_data, user_data): + if user_data is None: + number = 0 + tag = dpg.generate_uuid() + numbers[tag] = number + else: + tag, number = user_data + with dpg.group(horizontal=True, tag=tag, parent="input_group"): + dpg.add_input_int(default_value=number, callback=update, user_data=tag) + dpg.add_button(label=" X ", callback=remove, user_data=tag) + with dpg.tooltip(parent=dpg.last_item()): + dpg.add_text("Remove this input") + + +with dpg.window() as primary_window: + with dpg.group(horizontal=True): + dpg.add_button(label="Add number", callback=add) + dpg.add_button(label="Print numbers", callback=lambda: print(numbers.values())) + + with dpg.group(tag="input_group"): + for tag, number in numbers.items(): + add(None, None, (tag, number)) + + +dpg.set_primary_window(primary_window, True) +dpg.create_viewport(width=400, height=100, title="Data binding with dict") +dpg.setup_dearpygui() +dpg.show_viewport() +dpg.start_dearpygui() +dpg.destroy_context() diff --git a/data_binding/data_binding_with_list.py b/data_binding/data_binding_with_list.py new file mode 100644 index 0000000..33cc89b --- /dev/null +++ b/data_binding/data_binding_with_list.py @@ -0,0 +1,37 @@ +import dearpygui.dearpygui as dpg +dpg.create_context() + +numbers = [0, 0, 0, 0] + +def update(_, app_data, user_data): + numbers[user_data] = app_data + +def remove(): + if len(numbers) > 1: + numbers.pop() + last_input = dpg.get_item_children('input_group',1)[-1] + dpg.delete_item(last_input) + +def add(): + numbers.append(0) + dpg.add_input_int(parent='input_group', callback=update, user_data=len(numbers)-1) + + +with dpg.window() as primary_window: + + with dpg.group(horizontal=True): + dpg.add_button(label='Add number', callback=add) + dpg.add_button(label='Remove last number', callback=remove) + dpg.add_button(label="Print numbers", callback=lambda: print(numbers)) + + with dpg.group(tag='input_group'): + for idx, number in enumerate(numbers): + dpg.add_input_int(default_value=number, callback=update, user_data=idx) + + +dpg.set_primary_window(primary_window, True) +dpg.create_viewport(width=400, height=100, title="Data binding with list") +dpg.setup_dearpygui() +dpg.show_viewport() +dpg.start_dearpygui() +dpg.destroy_context() \ No newline at end of file diff --git a/examples/simple_paint.py b/drawing/simple_paint.py similarity index 100% rename from examples/simple_paint.py rename to drawing/simple_paint.py diff --git a/examples/listbox_custom.py b/listbox/listbox_custom.py similarity index 100% rename from examples/listbox_custom.py rename to listbox/listbox_custom.py diff --git a/examples/listbox_key_press.py b/listbox/listbox_key_press.py similarity index 100% rename from examples/listbox_key_press.py rename to listbox/listbox_key_press.py diff --git a/examples/print_from_pdf_viewer.py b/misc/print_from_pdf_viewer.py similarity index 100% rename from examples/print_from_pdf_viewer.py rename to misc/print_from_pdf_viewer.py diff --git a/examples/persistance_of_windows.py b/persistance/persistance_of_windows.py similarity index 100% rename from examples/persistance_of_windows.py rename to persistance/persistance_of_windows.py diff --git a/examples/persistance_using_dataclasses.py b/persistance/persistance_using_dataclasses.py similarity index 100% rename from examples/persistance_using_dataclasses.py rename to persistance/persistance_using_dataclasses.py diff --git a/examples/persistance_using_dict.py b/persistance/persistance_using_dict.py similarity index 100% rename from examples/persistance_using_dict.py rename to persistance/persistance_using_dict.py diff --git a/examples/plot_enforce_limits.py b/plots/plot_enforce_limits.py similarity index 100% rename from examples/plot_enforce_limits.py rename to plots/plot_enforce_limits.py diff --git a/examples/plot_update_line_colour.py b/plots/plot_update_line_colour.py similarity index 100% rename from examples/plot_update_line_colour.py rename to plots/plot_update_line_colour.py diff --git a/examples/plot_update_marker_size.py b/plots/plot_update_marker_size.py similarity index 100% rename from examples/plot_update_marker_size.py rename to plots/plot_update_marker_size.py diff --git a/examples/get_item_size_on_startup.py b/sizing/get_item_size_on_startup.py similarity index 100% rename from examples/get_item_size_on_startup.py rename to sizing/get_item_size_on_startup.py diff --git a/examples/resize_button_with_viewport.py b/sizing/resize_button_with_viewport.py similarity index 100% rename from examples/resize_button_with_viewport.py rename to sizing/resize_button_with_viewport.py diff --git a/examples/resize_child_window.py b/sizing/resize_child_window.py similarity index 100% rename from examples/resize_child_window.py rename to sizing/resize_child_window.py diff --git a/examples/spacing_using_auto_align.py b/spacing/spacing_using_auto_align.py similarity index 100% rename from examples/spacing_using_auto_align.py rename to spacing/spacing_using_auto_align.py diff --git a/examples/spacing_using_child_window_grid.py b/spacing/spacing_using_child_window_grid.py similarity index 100% rename from examples/spacing_using_child_window_grid.py rename to spacing/spacing_using_child_window_grid.py diff --git a/examples/spacing_using_tables.py b/spacing/spacing_using_tables.py similarity index 100% rename from examples/spacing_using_tables.py rename to spacing/spacing_using_tables.py diff --git a/examples/progress_bar.py b/threading/progress_bar.py similarity index 100% rename from examples/progress_bar.py rename to threading/progress_bar.py diff --git a/examples/start_stop_button_basic.py b/threading/start_stop_button_basic.py similarity index 100% rename from examples/start_stop_button_basic.py rename to threading/start_stop_button_basic.py diff --git a/examples/start_stop_button_class.py b/threading/start_stop_button_class.py similarity index 100% rename from examples/start_stop_button_class.py rename to threading/start_stop_button_class.py diff --git a/examples/child_window_clicked_handler.py b/window/child_window_clicked_handler.py similarity index 100% rename from examples/child_window_clicked_handler.py rename to window/child_window_clicked_handler.py diff --git a/examples/drag_menu_bar.py b/window/drag_menu_bar.py similarity index 100% rename from examples/drag_menu_bar.py rename to window/drag_menu_bar.py diff --git a/examples/restrict_window_position.py b/window/restrict_window_position.py similarity index 100% rename from examples/restrict_window_position.py rename to window/restrict_window_position.py diff --git a/examples/window_always_on_top.py b/window/window_always_on_top.py similarity index 100% rename from examples/window_always_on_top.py rename to window/window_always_on_top.py