Skip to content

Releases: hoffstadt/DearPyGui

Version 2.3

17 Apr 10:56

Choose a tag to compare

News

We've finally updated to a more recent version of Dear ImGui, 1.92.5! While it's not the newest version (the newest at the moment is 1.92.7), it's still relevant and brings a number of changes. See the section Dear ImGui Update below for more info.

We've also updated ImPlot (to v.0.17) and ImNodes (to latest commit), but these two libraries do not have any changes noticeable on DPG side.

Changelog

New Features

  • feat: Dear ImGui update to 1.92.5 #2610
  • feat: thread-local state #2611
    • Dear PyGui is now supposed to be entirely thread-safe. Starting with this release, things like the container stack and dpg.last_item() are thread-local, which removes conflicts when DPG is used from two threads simultaneously. See PR #2611 for details.
  • feat: added linux aarch64 build #2625
  • feat: item type information, provided as a separate module type_info.py #2631
  • feat: the "toggled open" handler can now fire on both "open" and "close" events #2626
    • Use two_way=True on add_item_toggled_open_handler to handle the "close" event.
  • feat: added one more theme to DearPyGui_Ext - see create_theme_imgui_classic(). This is also the theme that DPG / ImGui uses at startup by default. #2610
    • The other two themes (dark / light) have been updated from ImGui / ImPlot / ImNodes source code, as they actually come from those libraries. This only adds more colors to them; colors already present in DearPyGui_Ext have not changed.
  • win32: you can now configure whether Alt+Enter will switch the app to fullscreen mode - use configure_app(win32_alt_enter_fullscreen=True). #2610
    • This is a "feature" of DXGI (DirectX Graphics Infrastructure) and is therefore specific to Windows platform. It was enabled in all previous releases without an opt-out. Now, the default value for this option is False, which disables the hotkey. If you need to keep the old behavior, set it to True explicitly.

Fixes

  • perf: optimized list conversions #2613
  • fix: restored item aliases in node editor and other places (#2122) #2615
  • fix: PyObject leaks in custom series and other places #2617
  • fix: no more segfaults on custom_series with channel_count > 2 #2616
  • fix: segfault on deletion of an item residing in the container stack #2624
  • fix: binary compatibility with older C runtimes on Windows #2612
  • fix: add missing resized state for child_window #2538
  • fix: dpg.configure_item() ignores rect's translation #2574
  • docs: update node-editor.rst to fix broken link by removing expired token #2560

Dear ImGui Update

Here are the changes that new ImGui brings to DPG:

  • By far the most noticeable change is that ImGui now builds font atlas on-the-fly based on what text is being rendered.
    • We don't need to preload character glyphs anymore - no need for all those add_font_range calls! The font range functions are now no-op and deprecated. You just add a font, bind it, and it all magically works :).
    • You can even do configure_item(my_font, size=new_font_size)! (e.g. to change font size on the fly with a slider in app settings).
  • Also, fonts on high-DPI screens are now pixel-perfect - earlier, on macOS with Retina you'd be getting blurred text because of bitmap rescaling applied to the entire GUI. Now, if you're using a TTF font (not the built-in Proggy Clean), you'll get crisp boundaries of character glyphs.
  • Bugfix: Selectable items that are in the "selected" state are now correctly rendered with the mvThemeCol_Header color rather than with an average of mvThemeCol_Header and mvThemeCol_HeaderHovered. This was a regression introduced in DPG 2.0.
  • Buttons with repeat=True now produce the first "pressed" event (i.e. call the callback) on mouse-down - previously the user needed to hold the mouse button pressed for a while before the auto-repeat button started firing the callback. That wait interval was very short, so this change will probably go unnoticed by the end users. However, it might affect your callbacks if they are complicated enough to depend on this delay.
  • On child windows with both resize_x and resize_y, there's a resize grip in the lower right corner. It only shows up on hovering the corner and is quite unnoticeable with the default theme, but pretty much visible with the dark theme (see create_theme_imgui_dark() in DearPyGui_Ext).
  • Child windows can now be resizable on one axis and auto_resize on the other axis (this previously didn't work).
  • On dpg.window(), you can enable the Ctrl+C keyboard shortcut to copy window contents as text (useful for message boxes).
  • You can also disable docking on per-window basis (obviously only makes sense with docking enabled globally via configure_app).
  • On numeric input fields, it's possible to display zero value as an empty field, and accept empty input, treating it as a zero.
  • A number of new flags on tab_bar and tab have been added.
  • Tree nodes can now handle the left arrow key on keyboard and collapse nodes / navigate to parent node the way you'd expect a tree widget do :).
  • Tree nodes can also render lines that display the tree structure.
  • New styles and colors have been added.

Other changes to DPG related to this update:

  • Style Editor: removed all settings that cannot be configured via dpg.theme in order to avoid confusion - earlier versions included some settings that were inaccessible via DPG API and therefore could only be temporarily changed in Style Editor, without a way to preserve them or bake into your application.

Breaking Changes

We have a couple of minor breaking changes that will hopefully never surface in real world:

  1. Behavior of the pos argument has changed a little in certain rather unlikely scenarios. In particular, if you have the following:
  • a horizontal group,
  • one of the items within that group is positioned explicitly with pos or set_item_pos - let's call it an "absolutely positioned item",
  • it's not the last item, i.e. there are non-pos items after it in the same group,

    then in the new release all items that go after the absolutely positioned one within that group will be laid out differently. I hope no one uses such a complicated structure. Even if you bump into this, just reorganize your code a bit so that the absolutely positioned item lives in a regular, non-horizontal group (e.g. wrap it with dpg.group).
  1. With keyboard_navigation enabled via configure_app, drawlists (dpg.drawlist()) now display the "navigation cursor", i.e. the focus rectangle, just like other widgets do (buttons, etc.). Drawlists have always been navigable with keyboard navigation, but in old versions the navigation cursor was not displayed. This looked really weird, the cursor disappearing during navigation and the user having no idea where the focus currently is.

    If you need to hide the cursor, either make it transparent via a theme (see mvThemeCol_NavHighlight) or disable the drawlist by placing it into dpg.group(enabled=False). The latter prevents navigation from entering the drawlist at all (which is again different from old behavior because the drawlist was navigable back then). Note that dpg.drawlist currently ignores themes, so to hide the cursor you'd need to wrap the drawlist with a dpg.group and bind your theme to that group.

Known Issues

There's a known issue in Dear ImGui itself where selection background in input fields is misplaced by a couple of pixels - see ImGui ticket #9311. We'll eventually update ImGui again to fix the issue.

Thank You!

Dear PyGui development is currently funded by a handful of gracious sponsors and we would like to thank them tremendously. We wouldn't be here with out you guys.

Thank you for supporting us.

If you or your company uses Dear PyGui, please consider supporting us! We need it now more than ever.

New Contributors

Full Changelog: v2.2.0...v2.3.0

Version 2.2

19 Feb 17:08

Choose a tag to compare

News

This release mainly focuses on multithreading/synchronization issues - deadlocks, segfaults, race conditions. It also brings some enhancements - see the New Features section!

Please note that Dear PyGui is still not entirely thread-safe because some things like dpg.last_item() or the container stack are still shared among threads. We're going to fix this in the next release.

The next minor release will include an update of Dear ImGui, ImPlot, and ImNodes. We'll try to ship it soon, so this time it will hopefully be a short release cycle.

Also, because of changes to GitHub runners we had to remove Intel-based macOS builds. If you still need to support macOS on x86, you'll have to build DPG locally.

Changelog

New Features

  • feat: added a scroll handler to easily track scrolling events #2588
  • feat: focus and hover handlers can now track state changes like "mouse-in on the item" or "item lost focus" #2586
  • feat: Item Registry tool (show_item_registry) got quite a revamp #2593
  • feat: show_tool now brings the tool window to front #2593
  • feat: ability to get table column width, as well as bind a resize handler or a visible handler to the column #2591
  • feat: ability to create synced tables #2592

Fixes

  • perf: optimization of item lookup - no more slowing down when a lot of items are added (#2374) #2600
  • fix: proper reference counting on Python objects - fixes object leaks (#2036) #2580
  • feat: destroy_context now waits for all callbacks to complete before shutting down DPG (#2020) #2580
  • fix: a race condition between the callback queue and item deletion (segfaults when deleting custom series) (#2427) #2580
  • fix: no more races in set_frame_callback (#2269) #2580
  • fix: no more deadlocks caused by conflicts between DPG mutex and the GIL (#2053, #2366) #2581
  • fix: get_item_state was sometimes returning invalid state - this fixes is_item_* functions too (#2077) #2581
  • fix: get_text_size incorrectly returning [0, 0] in certain rare cases (#2167) #2581
  • fix: all callbacks and handlers now honor the "manual callback management" mode (#2208) #2580
  • fix: partial fix for functions erroneously returning None instead of nullptr (may affect exceptions raised by DPG, removing cascaded exceptions) #2599
  • feat: split_frame improved - the delay argument is not needed anymore #2583
    • Note: from now on, if destroy_context gets called while another thread is waiting in split_frame (e.g. in a callback), the split_frame call will raise an exception. Previously, it would just hang up. This allows the app to properly release waiting threads on shutdown. In complex apps, it might be a good idea to wrap split_frame calls with a try...except or a with suppress block.
  • fix: indent property is now supported on tables #2595
  • fix: on_close now works for popups (#2372) #2580
  • fix: support for event handlers on tooltips #2594
  • fix: item_visible handler now passes the ID of the widget in app_data, like other handlers do #2580
  • fix: fonts bound to table_row do get applied to the row #2595
  • fix: corrected size calculations for the ring-style loading_indicator + some minor fixes on add_loading_indicator (styles, navigation focus) #2590
  • fix: move_item won't allow moving to an incompatible parent #2600
  • docs: a typo in add_date_picker summary #2448
  • demo: fixed a bug with bar stacks #2522

Thank you!

Dear PyGui development is currently funded by a handful of gracious sponsors and we would like to thank them tremendously. We wouldn't be here with out you guys.

Thank you for supporting us.

If you or your company uses Dear PyGui, please consider supporting us! We need it now more than ever.

Also special thanks to @bzczb for his PR #2282. While it did not get merged, it nevertheless contains a valid fix for #2036, which was a rather complicated issue. We just happened to have two competing PRs and had to choose one or the other. #2282 was a good take on fixing the issue, which allowed us to double-check and validate some ideas. Thanks for the good job!

New Contributors

Full Changelog: v2.1.1...v2.2.0

Version 2.1.1

20 Nov 12:45

Choose a tag to compare

News

This is just a small maintenance release - we're adding support for Python 3.14.

Changelog

Fixes

  • docs: updated docs on plot query #2541
  • docs: updated the docs regarding window docking #2553
  • fix: added missing ImGuiStyleVar_TabBarOverlineSize constant #2564

Thank you!

Dear PyGui development is currently funded by a handful of gracious sponsors and we would like to thank them tremendously. We wouldn't be here with out you guys.

Thank you for supporting us.

If you or your company uses Dear PyGui, please consider supporting us! We need it now more than ever.

New Contributors

Full Changelog: v2.1.0...v2.1.1

Version 2.1

15 Aug 20:37

Choose a tag to compare

Changelog

New Features

  • feat: added missing NumPad keys #2468
  • feat (win32): rendering frames even when the viewport is moved or resized #2521

Please note: even though DearPyGui manages to render frames during viewport resize/move, the main rendering loop is actually blocked - that's the way it works on Windows. If you use a custom rendering loop instead of start_dearpygui, e.g. to run asyncio in the main thread, expect render_dearpygui_frame to block until resizing is done (DearPyGui will render frames multiple times within that blocked call). This is only relevant on Windows.

Fixes

  • fix (win32): no more hangups when the viewport is resized (#2401) #2521
  • fix (win32): slow typing (#1571, #2357) #2521
  • fix (win32): viewport resize callback not called when the viewport is shrunk (#1896, #2217) #2521
  • fix: move_item is horribly slow (#2343) #2476
  • fix: draw_image_quad now renders correctly when apply_transform is used (e.g. for rotation) #2290
  • fix: weird behavior of get_item_configuration on draw_polygon (#2462) #2467
  • fix: adding series to a secondary plot axis now works even if the axis ID is mvYAxis rather than mvYAxis2 or mvYAxis3 #2414
  • fix: table columns in an empty table get hidden for no reason (#2449) #2475
  • fix: tables with zero columns break theme/font stack #2472
  • fix: add_spacer now obeys hide_item #2474
  • fix (demo): fixed a regression in drag & drop to plot axes (Plot - Tools - Drag & Drop) #2408
  • fix (demo): a typo #2418

Thank you!

Dear PyGui development is currently funded by a handful of gracious sponsors and we would like to thank them tremendously. We wouldn't be here with out you guys.

Thank you for supporting us.

If you or your company uses Dear PyGui, please consider supporting us! We need it now more than ever.

New Contributors

Full Changelog: v2.0.0...v2.1.0

Version 2.0

16 Oct 01:53

Choose a tag to compare

News

We hope everyone is doing well! It has been a while since we've had a new release. This will be the first release in which we introduce a handful of breaking changes (and thus the first time we increase the major version). The majority of the changes with this release are internal and were required to update to the latest versions of Dear ImGui and ImPlot.

The majority of this work was completed by Samuele Mazzi and Vladimir Ein. They deserve recognition for the hard work, dedication, and patience they put into this!

The changelog is below. Also don't forget to checkout the demo!

Changelog

New

  • Python 3.13 support

New Functions

  • add_axis_tag
  • add_bar_group_series
  • add_inf_line_series
  • add_digital_series
  • get_plot_query_rects
  • set_axis_limits_constraints
  • reset_axis_limits_constraints
  • set_axis_zoom_constraints
  • reset_axis_zoom_constraints

New arguments

Function Arguments
add_2d_histogram_series
col_major
add_button
repeat
add_child_window






always_auto_resize
always_use_window_padding
auto_resize_x
auto_resize_y
frame_style
resizable_x
resizable_y
add_colormap_scale


format
mirror
reverse_dir
add_combo
fit_width
add_custom_series
no_fit
add_drag_line



delayed
no_cursor
no_fit
no_inputs
add_drag_point





clamped
delayed
no_cursor
no_fit
no_inputs
offset
add_group
enabled
add_heat_series
col_major
add_histogram_series

cumulative
horizontal
add_input_text





always_overwrite
auto_select_all
ctrl_enter_for_new_line
escape_clears_all
no_horizontal_scroll
no_undo_redo
add_line_series




loop
no_clip
segments
shaded
skip_nan
add_pie_series
ignore_hidden
add_plot







max_query_rects
min_query_rects
no_frame
no_inputs
override_mod
query_color
zoom_mod
zoom_rate
add_plot_axis











auto_fit
foreground_grid
no_highlight
no_initial_fit
no_label
no_menus
no_side_switch
opposite
pan_stretch
range_fit
scale
tick_format
add_plot_legend




no_buttons
no_highlight_axis
no_highlight_item
no_menus
sort
add_scatter_series
no_clip
add_stair_series

pre_step
shaded
add_stem_series
horizontal
add_subplots
share_series
add_table_column

angled_header
no_header_label
add_text_point
offset
add_tree_node

span_full_width
span_text_width
add_window
unsaved_document
configure_app



anti_aliased_fill
anti_aliased_lines
anti_aliased_lines_use_tex
docking_shift_only

Deprecated functions

  • add_hline_series: use add_inf_line_series()
  • add_vline_series: use add_inf_line_series()
  • get_plot_query_area: use get_plot_query_rects()
  • is_plot_queried: use get_plot_query_rects()

Deprecated arguments

Function Argument Explanation
add_histogram_series cumlative Deprecated because of a typo: use cumulative
add_image_button frame_padding Not supported anymore by Dear ImGui; still works in DPG but will eventually be removed.
add_plot anti_aliased Not supported by ImPlot anymore. To enable/disable anti-aliasing, use dpg.configure_app() with the anti_aliasing parameters.
add_plot no_child Removed in ImPlot as child windows are no longer needed to capture scroll.
add_plot no_highlight Removed because not supported by ImPlot anymore. To control the highlighting of series use the same argument in add_plot_legend.
`a...
Read more

Version 1.11.0

05 Mar 03:06

Choose a tag to compare

News

Nothing really new to report. We are still actively working towards "Dear PyGui 2". The current working name is Pilot Light UI!

Changelog

New Features

  • feat: add python 3.12 support
  • feat: better keyboard navigations support #2144
  • feat: added get_focused_item() to request current nav focus

Fixes

  • fix: Replaced four separate corner colors with a single param that properly maps colors to corners #2239
  • fix: adding/removing a child in table doesn't reset row colors
  • fix: enabled themes on table columns and cells #1782
  • fix: nodes created with show=False led to seg fault #2151
  • fix: mvNodeLink internal issues with handlers #2197
  • fix: resetting menu state if not open #2245
  • fix: keep open state when parent window is hidden for tree node and collapsing header #1873
  • fix: set_axis_ticks can be used on secondary Y axes #2253

Misc

  • Minimum Python version now 3.8

Thank you!

Dear PyGui development is currently funded by a handful of gracious sponsors and we would like to thank them tremendously. We wouldn't be here with out you guys.

Thank you for supporting us.

If you or your company uses Dear PyGui, please consider supporting us! We need it now more than ever.

Full Changelog: v1.10.0...v1.11.0

Version 1.10.0

14 Sep 02:43

Choose a tag to compare

News

Nothing really new to report. We are still actively working towards "Dear PyGui 2". The current working name is Pilot Light UI!

Changelog

New Features

  • feat: get_item_configuration() for fonts #2114
  • feat: activation delay for tooltips
  • feat: add scroll functions to tables #1947
  • feat: no scroll with mouse flag #2134
  • feat: ability to hide separators (previously not honored)
  • feat: add PixelSnapH parameter for fonts

Fixes

  • fix: get_all_items() with table columns #2027
  • fix: error handling for DwmGetWindowAttribute #2111
  • fix: menu hovering issue #2131

Thank you!

Dear PyGui development is currently funded by a handful of gracious sponsors and we would like to thank them tremendously. We wouldn't be here with out you guys.

Thank you for supporting us.

If you or your company uses Dear PyGui, please consider supporting us! We need it now more than ever.

New Contributors

Full Changelog: v1.9.1...v1.10.0

Version 1.9.1

06 May 04:09
74ab854

Choose a tag to compare

News

Just a small maintenance release. Things may seem quiet but don't worry! We are still here. We are just spending most of our effort focusing on Pilot Light which will be the powering Dear PyGui 2.

Changelog

New Features

  • feat: groups can now have heights that children will inherit @Mstpyt

Fixes

  • fix: win32 viewport padding regression introduced in v1.9
  • fix: get_alias_id(...) #2034
  • fix: possible race condition with configure_viewport(...)

Misc

  • minimum MacOS version has been moved up from 10.15 to 11.
  • Github actions removed Ubuntu 18.04, forcing us to move up to Ubuntu 20.04 (which means we are linking to a new glibc)

Thank you!

Dear PyGui development is currently funded by a handful of gracious sponsors and we would like to thank them tremendously. We wouldn't be here with out you guys.

Thank you for supporting us.

If you or your company uses Dear PyGui, please consider supporting us! We need it now more than ever.

Full Changelog: v1.9.0...v1.9.1

Version 1.9

23 Mar 02:11

Choose a tag to compare

Changelog

New Features

  • feat: plot time ISO format by @Pcothren in #1976
  • feat: double-click handlers for items by @v-ein in #2005
  • feat: "disable_close" keyword added to viewport by @Mstpyt

Fixes

New Contributors

Thank you!

Dear PyGui development is currently funded by a handful of gracious sponsors and we would like to thank them tremendously. We wouldn't be here with out you guys.

Thank you for supporting us.

If you or your company uses Dear PyGui, please consider supporting us! We need it now more than ever.

Full Changelog: v1.8.0...v1.9.0

Version 1.8

31 Oct 02:39

Choose a tag to compare

News

We have added Python 3.11 support!

As many of you already know, we decided a while back to begin work on a custom graphics engine and UI library to build Dear PyGui 2 with instead of Dear ImGui. This is still our long term desire but we have decided... this goal will be for Dear PyGui 3. In order to ease the burden on both ourselves and you guys, we've decided to make Dear PyGui 2 as an intermediate step(or compromise if you will). The idea being that it will have a one-to-one mapping to Dear ImGui, making our work much much easier. This will also make things more stable as there will be less between YOU and Dear ImGui, not to mention keeping up with the latest version will be trivial. We will also split up ImPlot, ImNodes etc. so they can move at the pace of their respective libraries.

The only thing we will add on will be the ability to "record" your "commands" so that they can be replayed in a similar manner to DPG 1 (helps with python based performance hits).

The most important consequence of this decision is that Dear PyGui 2.0 will be released much sooner (as in a few months)! Here is the repo!

Changelog

Fixes

  • fix: file dialog not respecting bound themes #1928 #1713

Thank you!

Dear PyGui development is currently funded by a handful of gracious sponsors and we would like to thank them tremendously. We wouldn't be here with out you guys.

Thank you for supporting us.

If you or your company uses Dear PyGui, please consider supporting us! We need it now more than ever.