|
|
delete(handle) löscht die Objekte nicht |
|
mr. edd |
Forum-Anfänger
|
|
Beiträge: 10
|
|
|
|
Anmeldedatum: 12.04.10
|
|
|
|
Wohnort: ---
|
|
|
|
Version: 2009a
|
|
|
|
|
|
Verfasst am: 12.04.2010, 13:10
Titel: delete(handle) löscht die Objekte nicht
|
|
|
|
|
Hallo zusammen,
ich habe ein Problem mit zur Laufzeit erstellten GUI-Controls:
Ich habe eine variable Anzahl an Signalbestandteilen (nach einer Transformation), die jeweils mit einem Slider oder edit-Feld zusammen dargestellt werden sollen. Über diesen Slider oder den Eintrag im Edit-Feld lässt sich dann die Gewichtung des Kanals für die Rücktransformation einstellen (einfache Filterbank).
Ändere ich nun die Anzahl der dargestellten Kanäle, so ist mein bisheriger Ansatz, die nicht mehr benötigten alten Slider zu löschen und einfach passend neue zu erstellen. (Ich weiß, das kann man optimieren) Die alten Slider werden nach einem delete aber nicht gelöscht!
Soll heißen, dass Sie immer noch sichtbar sind. Somit "mülle" ich mir die Oberfläche mit alten Slidern zu. Erst nach einem resize sind alle gelöschten Slider wirklich weg.
Schreibe ich hingegen eine Funktion, die nichts anderes macht, als die alten Slider zu löschen und verknüpfe sie mit einem Button, funktioniert das Löschen der Slider. Wo ist da der Unterschied?
Hier sind die einzigen Stellen, wo auf die Handles der Slider zugegriffen wird:
(die Initialisierung mit handles.slider=[]; mal außen vor gelassen.)
Verknüpfe ich diese Funktion mit einem Button, so funktioniert das delete einwandfrei:
Wer weiß Rat und kann helfen?
Gruß,
Christoph
[edit]drawnow; und refresh(handles.figure); bringen auch keine Abhilfe.[/edit]
|
|
|
|
|
denny |
Supporter
|
|
Beiträge: 3.853
|
|
|
|
Anmeldedatum: 14.02.08
|
|
|
|
Wohnort: Ulm
|
|
|
|
Version: R2012b
|
|
|
|
|
|
Verfasst am: 12.04.2010, 14:17
Titel:
|
|
Hallo , an welcher Stelle hast du denn drawnow, eingesetzt?
|
|
|
mr. edd |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 10
|
|
|
|
Anmeldedatum: 12.04.10
|
|
|
|
Wohnort: ---
|
|
|
|
Version: 2009a
|
|
|
|
|
|
Verfasst am: 12.04.2010, 17:22
Titel:
|
|
denny hat Folgendes geschrieben: |
Hallo , an welcher Stelle hast du denn drawnow, eingesetzt? |
Ups, vergessen.
Drawnow und refresh() standen hinter der for-Schleife.
Gruß,
Christoph
|
|
|
denny |
Supporter
|
|
Beiträge: 3.853
|
|
|
|
Anmeldedatum: 14.02.08
|
|
|
|
Wohnort: Ulm
|
|
|
|
Version: R2012b
|
|
|
|
|
|
Verfasst am: 12.04.2010, 21:09
Titel:
|
|
Zitat: |
Ups, vergessen.
Drawnow und refresh() standen hinter der for-Schleife.
|
Dann setze drawnow direkt nach delete-Befehl.
GUI braucht Zeit, um sich zu aktualisieren. Es passiert meist automatisch, wenn Matlab nicht beschäftigt ist, oder wenn Fuktion Ausführung zu Ende ist
(wie bei deinem pushbutton).
Bei UpdatePlots löscht zu zwar die alten Sliders, erzeugst aber in der Schleife sofort die neuen Slider, da merkst du doch nicht mal, ob die Slider weg sind
|
|
|
mr. edd |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 10
|
|
|
|
Anmeldedatum: 12.04.10
|
|
|
|
Wohnort: ---
|
|
|
|
Version: 2009a
|
|
|
|
|
|
Verfasst am: 13.04.2010, 08:03
Titel:
|
|
|
|
|
denny hat Folgendes geschrieben: |
Dann setze drawnow direkt nach delete-Befehl. |
Das funktioniert. *verwirrt*
denny hat Folgendes geschrieben: |
GUI braucht Zeit, um sich zu aktualisieren. Es passiert meist automatisch, wenn Matlab nicht beschäftigt ist, oder wenn Fuktion Ausführung zu Ende ist
(wie bei deinem pushbutton). |
Warum spielt die Durchlaufzeit von drawnow eine Rolle? drawnow braucht x ms um die GUI zu aktualisieren. Ob direkt nach dem delete oder erst nach dem Erstellen der neuen Slider sollte doch egal sein, oder? Wenn drawnow einen Hintergrund-Task anstößt ist es doch erst recht egal.
So muss doch sogar zwei Mal drawnow aufgerufen werden: Einmal von mir, nach dem Löschen der alten Slider und dann erneut von Matlab, wenn die Funktion durchgelaufen ist und die neuen Slider angezeigt werden müssen...
Bitte klär mich über meinen Denkfehler auf.
denny hat Folgendes geschrieben: |
Bei UpdatePlots löscht zu zwar die alten Sliders, erzeugst aber in der Schleife sofort die neuen Slider, da merkst du doch nicht mal, ob die Slider weg sind |
Die neuen Slider werden an anderen Positionen erzeugt. Wenn ich von sechs angezeigten Kanälen auf zwei Kanäle wechsel und dann acht Slider auf dem Bildschirm habe, bin ich mir ziemlich sicher, dass die alten noch da sind.
Gruß,
Christoph
|
|
|
denny |
Supporter
|
|
Beiträge: 3.853
|
|
|
|
Anmeldedatum: 14.02.08
|
|
|
|
Wohnort: Ulm
|
|
|
|
Version: R2012b
|
|
|
|
|
|
Verfasst am: 13.04.2010, 09:08
Titel:
|
|
Hallo
Zitat: |
Warum spielt die Durchlaufzeit von drawnow eine Rolle? drawnow braucht x ms um die GUI zu aktualisieren. Ob direkt nach dem delete oder erst nach dem Erstellen der neuen Slider sollte doch egal sein, oder? Wenn drawnow einen Hintergrund-Task anstößt ist es doch erst recht egal.
So muss doch sogar zwei Mal drawnow aufgerufen werden: Einmal von mir, nach dem Löschen der alten Slider und dann erneut von Matlab, wenn die Funktion durchgelaufen ist und die neuen Slider angezeigt werden müssen... |
Nein, wenn matlab beschäftigt ist, dann hat er keine Zeit die GUIs zu aktualisieren. Drawnow sagt aber matlab, das er soll jetzt an dieser Stelle GUI aktualisieren.
Schau einfach dir noch diese Beispiele an,
hier kein drawnow -- kein Wechsel zwischen plots
mit drawnow funktioniert der Wechsel zwischen plots
setze ich pause rein, werden auch plots aktualisiert
|
|
|
mr. edd |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 10
|
|
|
|
Anmeldedatum: 12.04.10
|
|
|
|
Wohnort: ---
|
|
|
|
Version: 2009a
|
|
|
|
|
|
Verfasst am: 13.04.2010, 09:55
Titel:
|
|
|
|
|
denny hat Folgendes geschrieben: |
Nein, wenn matlab beschäftigt ist, dann hat er keine Zeit die GUIs zu aktualisieren. Drawnow sagt aber matlab, das er soll jetzt an dieser Stelle GUI aktualisieren. |
Ok.
denny hat Folgendes geschrieben: |
Schau einfach dir noch diese Beispiele an |
Im Gegensatz zu deinen Beispielen, brauche ich das GUI-Element nicht mehrfach. Bei deinen Beispielen ist mir klar, dass da irgendwie ein GUI-Update nötig ist. Vergleichbar mit meinem Beispiel wäre aber eher, wenn Du mehrere Plots erstellst.
Ich möchte ja nicht den selben Slider mehrfach verwenden sondern einfach nur ein paar alte Controls löschen und danach ein paar neue erstellen.
Mir ist auch nach deinen Beispielen noch nicht klar, warum das drawnow direkt hinter dem delete wirkt, aber nach der for-Schleife nicht. Die alten Slider sind in beiden Fällen vorher gelöscht worden.
funktioniert,
funktioniert hingegen nicht. In beiden Fällen sind die alten Slider aber vor dem drawnow gelöscht worden. Ich hoffe, damit wird mein Verständnisproblem deutlicher.
Gruß,
Christoph
|
|
|
denny |
Supporter
|
|
Beiträge: 3.853
|
|
|
|
Anmeldedatum: 14.02.08
|
|
|
|
Wohnort: Ulm
|
|
|
|
Version: R2012b
|
|
|
|
|
|
Verfasst am: 13.04.2010, 12:49
Titel:
|
|
Ach warum bei plot verhält sich das schon ähnlich. plot löscht auch jedesmal komplett die Axes und zeichnet die Linien neu.
|
|
|
mr. edd |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 10
|
|
|
|
Anmeldedatum: 12.04.10
|
|
|
|
Wohnort: ---
|
|
|
|
Version: 2009a
|
|
|
|
|
|
Verfasst am: 14.04.2010, 12:44
Titel:
|
|
|
|
|
denny hat Folgendes geschrieben: |
|
Zur Verdeutlichung habe ich drei Screenshots gemacht: (Aus den Slidern sind in der Zwischenzeit edit-Felder geworden, das Phänomen bleibt aber bestehen.)
- Ausgangslage: Originalsignal in grün, darunter die ersten sechs Signalteile in blau.
- drawnow nach delete: Originalsignal in grün, darunter die ersten beiden Signalanteile in blau. Es sind nur noch die beiden neuen controls sichtbar.
- drawnow nach for-Schleife: Originalsignal in grün, darunter die ersten beiden Signalanteile in blau. Die alten Controls aus der sechser-Ansicht sind immer noch da.
In der angehängten GUI kann man sehen, dass drawnow erst beim zweiten Aufruf die gelöschten Slider auch aus der Anzeige entfernt. Die Screenshots im zip-Archiv zeigen das Verhalten auf meinem Rechner.
Gruß,
Christoph
Beschreibung: |
Kleine Test-GUI mit Screenshots. |
|
Download |
Dateiname: |
test.zip |
Dateigröße: |
219.99 KB |
Heruntergeladen: |
565 mal |
Beschreibung: |
So sieht es aus, wenn das drawnow nach der for-Schleife kommt und nicht unmittelbar nach dem delete. |
|
Download |
Dateiname: |
drawnow nach for-Schleife.png |
Dateigröße: |
12.75 KB |
Heruntergeladen: |
919 mal |
Beschreibung: |
So sollte es immer aussehen. |
|
Download |
Dateiname: |
drawnow nach delete.png |
Dateigröße: |
8.08 KB |
Heruntergeladen: |
900 mal |
Beschreibung: |
|
Download |
Dateiname: |
Ausgangslage.png |
Dateigröße: |
11.5 KB |
Heruntergeladen: |
937 mal |
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| RSS
Hosted by:
Copyright © 2007 - 2025
goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.
|
|