Navigation.remove_all() räumt Toolbar/Menü beim Unload tatsächlich auf (#72)
remove_toolbar()/remove_menu() nahmen Toolbar und Menü bisher nur aus der sichtbaren Leiste, das Qt-Objekt blieb als Kind von main_window bestehen. Beim Neuladen mit dem Plugin Reloader meldete QGIS deshalb "removing duplicated widget(s) not cleaned up by the plugin during unload: LnoSachsenToolbar" - der defensive Workaround in init_ui() (Suche nach übrig gebliebenen Toolbars) kaschierte das nur beim nächsten Laden, nicht beim Unload selbst. remove_all() ruft jetzt deleteLater() auf beide Objekte, bevor die Referenzen verworfen werden - dieselbe Behandlung, die init_ui() schon für Altlasten nutzt. deleteLater() ist in PyQt5 und PyQt6 identisch, keine QGIS3/4-Fallunterscheidung nötig. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -114,12 +114,18 @@ class Navigation:
|
||||
self.actions = [(p, a) for p, a in self.actions if a != action]
|
||||
|
||||
def remove_all(self):
|
||||
# remove_menu()/remove_toolbar() nehmen Menü/Toolbar nur aus der sichtbaren Leiste –
|
||||
# das Qt-Objekt bleibt sonst als Kind von main_window bestehen (Issue #72, vom Plugin
|
||||
# Reloader als "duplicated widget(s) not cleaned up" gemeldet). deleteLater() räumt es
|
||||
# tatsächlich auf, analog zum bestehenden Workaround in init_ui().
|
||||
if self.menu:
|
||||
remove_menu(self.menu)
|
||||
self.menu.deleteLater()
|
||||
self.menu = None
|
||||
|
||||
if self.toolbar:
|
||||
remove_toolbar(self.toolbar)
|
||||
self.toolbar.deleteLater()
|
||||
self.toolbar = None
|
||||
|
||||
self.actions.clear()
|
||||
|
||||
Reference in New Issue
Block a user