Releases: hoffstadt/DearPyGui
Version 2.3
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.
- Dear PyGui is now supposed to be entirely thread-safe. Starting with this release, things like the container stack and
- 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=Trueonadd_item_toggled_open_handlerto handle the "close" event.
- Use
- feat: added one more theme to
DearPyGui_Ext- seecreate_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_Exthave not changed.
- 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
- 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_serieswithchannel_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_rangecalls! 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).
- We don't need to preload character glyphs anymore - no need for all those
- 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_Headercolor rather than with an average ofmvThemeCol_HeaderandmvThemeCol_HeaderHovered. This was a regression introduced in DPG 2.0. - Buttons with
repeat=Truenow produce the first "pressed" event (i.e. call thecallback) 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_xandresize_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 (seecreate_theme_imgui_dark()inDearPyGui_Ext). - Child windows can now be
resizableon one axis andauto_resizeon 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_barandtabhave 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.themein 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:
- Behavior of the
posargument 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
posorset_item_pos- let's call it an "absolutely positioned item", - it's not the last item, i.e. there are non-
positems 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 withdpg.group).
- With
keyboard_navigationenabled viaconfigure_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 (seemvThemeCol_NavHighlight) or disable the drawlist by placing it intodpg.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 thatdpg.drawlistcurrently ignores themes, so to hide the cursor you'd need to wrap the drawlist with adpg.groupand 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
- @LonKeyDotae made their first contribution in #2560
- @zznewclear13 made their first contribution in #2574
Full Changelog: v2.2.0...v2.3.0
Version 2.2
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_toolnow 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_contextnow 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_statewas sometimes returning invalid state - this fixesis_item_*functions too (#2077) #2581 - fix:
get_text_sizeincorrectly 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
Noneinstead ofnullptr(may affect exceptions raised by DPG, removing cascaded exceptions) #2599 - feat:
split_frameimproved - thedelayargument is not needed anymore #2583- Note: from now on, if
destroy_contextgets called while another thread is waiting insplit_frame(e.g. in a callback), thesplit_framecall 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 wrapsplit_framecalls with atry...exceptor awith suppressblock.
- Note: from now on, if
- fix:
indentproperty is now supported on tables #2595 - fix:
on_closenow works for popups (#2372) #2580 - fix: support for event handlers on tooltips #2594
- fix:
item_visiblehandler now passes the ID of the widget inapp_data, like other handlers do #2580 - fix: fonts bound to
table_rowdo get applied to the row #2595 - fix: corrected size calculations for the ring-style
loading_indicator+ some minor fixes onadd_loading_indicator(styles, navigation focus) #2590 - fix:
move_itemwon't allow moving to an incompatible parent #2600 - docs: a typo in
add_date_pickersummary #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
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_TabBarOverlineSizeconstant #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
- @yasserhcn made their first contribution in #2553
Full Changelog: v2.1.0...v2.1.1
Version 2.1
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_itemis horribly slow (#2343) #2476 - fix:
draw_image_quadnow renders correctly whenapply_transformis used (e.g. for rotation) #2290 - fix: weird behavior of
get_item_configurationondraw_polygon(#2462) #2467 - fix: adding series to a secondary plot axis now works even if the axis ID is
mvYAxisrather thanmvYAxis2ormvYAxis3#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_spacernow obeyshide_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
- @gengyuchao made their first contribution in #2408
- @DokaebiYe made their first contribution in #2290
- @ZhanYF made their first contribution in #2418
Full Changelog: v2.0.0...v2.1.0
Version 2.0
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_resizealways_use_window_paddingauto_resize_xauto_resize_yframe_styleresizable_xresizable_y |
add_colormap_scale |
formatmirrorreverse_dir |
add_combo |
fit_width |
add_custom_series |
no_fit |
add_drag_line |
delayedno_cursorno_fitno_inputs |
add_drag_point |
clampeddelayedno_cursorno_fitno_inputsoffset |
add_group |
enabled |
add_heat_series |
col_major |
add_histogram_series |
cumulativehorizontal |
add_input_text |
always_overwriteauto_select_allctrl_enter_for_new_lineescape_clears_allno_horizontal_scrollno_undo_redo |
add_line_series |
loopno_clipsegmentsshadedskip_nan |
add_pie_series |
ignore_hidden |
add_plot |
max_query_rectsmin_query_rectsno_frameno_inputsoverride_modquery_colorzoom_modzoom_rate |
add_plot_axis |
auto_fitforeground_gridno_highlightno_initial_fitno_labelno_menusno_side_switchoppositepan_stretchrange_fitscaletick_format |
add_plot_legend |
no_buttonsno_highlight_axisno_highlight_itemno_menussort |
add_scatter_series |
no_clip |
add_stair_series |
pre_stepshaded |
add_stem_series |
horizontal |
add_subplots |
share_series |
add_table_column |
angled_headerno_header_label |
add_text_point |
offset |
add_tree_node |
span_full_widthspan_text_width |
add_window |
unsaved_document |
configure_app |
anti_aliased_fillanti_aliased_linesanti_aliased_lines_use_texdocking_shift_only |
Deprecated functions
add_hline_series: useadd_inf_line_series()add_vline_series: useadd_inf_line_series()get_plot_query_area: useget_plot_query_rects()is_plot_queried: useget_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... |
Version 1.11.0
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
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
- @MadOctopus-private made their first contribution in #2118
- @mef51 made their first contribution in #2126
- @Yosh31207 made their first contribution in #2134
- @atallahade made their first contribution in #2160
Full Changelog: v1.9.1...v1.10.0
Version 1.9.1
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
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
- fix: text widget state update #1933 by @Pcothren in #1939
- fix: a horizontal group glues to previous line (#1999) by @v-ein in #2002
- fix: initial position for dpg.window with popup=True (#1975) by @v-ein in #2003
- fix: drawing thickness by @v-ein in #2001
- fix: item config/info oddities by @Atlamillias in #2010
- fix (demo): show menubar by @CiotatSoft in #2029
- fix: typo in add_button docstring by @arrys in #2056
New Contributors
- @Atlamillias made their first contribution in #1984
- @v-ein made their first contribution in #2002
- @MGBergweiler made their first contribution in #2007
- @CiotatSoft made their first contribution in #2029
- @AmirmohammadZarif made their first contribution in #2038
- @xlbljz made their first contribution in #2031
- @arrys made their first contribution in #2056
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
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
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.