arcade.gui UIManager (ui_manager.py) clear methods does not remove all widgets from the UImanager
Bug Report
arcade.gui UIManager clear does not remove all ui widgets
System Info
Arcade 2.6.17
vendor: AMD renderer: AMD Custom GPU 0405 (radeonsi, vangogh, LLVM 17.0.6, DRM 3.54, 6.1.52-valve16-1-neptune-61) version: (4, 6) python: 3.11.10 (main, Nov 10 2011, 15:00:00) [GCC 13.2.0] platform: linux
Actual behavior:
I have 2 widgets added by the add method of UImanager when I call the clear method only one of the widgets is removed
Expected behavior:
All widgets should be removed from the UImanager
Steps to reproduce/example code:
self.gui_manager = gui.UIManager() self.gui_manager.add(widget1) self.gui_manager.add(widget2) self.gui_manager.clear() ############################# the result: len(self.gui_manager.children().values()) == 1
Enhancement request:
What should be added/changed?
Documentation request:
What documentation needs to change?
Where is it located?
What is wrong with it? How can it be improved?
Hi, would you by any chance be able to help investigate what would be needed to fix this?
To my understanding, you may be better off switching to 3.0.0 previews for the moment:
- Most attention is on the 3.0.0 branch (
development):- You can install a preview now with
pip install arcade==3.0.0.dev36 - Doc is at https://api.arcade.academy/en/development/
- You can install a preview now with
- We've mulled a final EOL release of the 2.6.X line to add warnings + links to the 3.0.0 and dev preview doc
- Discussion is over at https://github.com/pythonarcade/arcade/issues/2358
- We might skip bugs in such a release
The fix can be easily done by copying the list of the children, no idea how terrible it is for the performance.
Original code:
def clear(self):
"""
Remove all widgets from UIManager
"""
for layer in self.children.values():
for widget in layer:
self.remove(widget)
Possible fix:
def clear(self):
"""
Remove all widgets from UIManager
"""
for layer in self.children.values():
layer = layer[:]
for widget in layer:
self.remove(widget)
I did not know 2.6 is EOL, thanks for notifying me, will try to upgrade to 3.0.0 preview.
I did not know 2.6 is EOL, thanks for notifying me, will try to upgrade to 3.0.0 preview.
That's understandable. It's why we're considering a final 2.6.18 release.
will try to upgrade to 3.0.0 preview.
The biggest changes are in GUI, a totally reworked camera system, and the shape drawing commands. Note that the dev previews use pyglet 2.1's dev previews, which means there will be pyglet changes as well. For Arcade, rendering changes also mean you have far more freedom to use the latest pyglet features.
@cbfbl
- Any luck upgrading to the 3.0 previews?
- Any interest in making a PR with tests for this into the
2.6-py-312branch?
I'd be glad to help you make a PR even if it's still somewhat of a hypothetical release at the moment.
- Yeah, did not have a lot of code so the problems I faced were minor and resolved fairly easy.
- Sure, is there a hypothetical deadline for such task as I can't guarantee my availability?
Fixed in 3.0