WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Wertübergabe

 

Gast

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.10.2009, 15:37     Titel: Wertübergabe
  Antworten mit Zitat      
Hallo

ich hoffe es kann mir jemand helfen. Ich habe ein GUI erstellt und möchte nun mehrere handles an checkbox_callback functions übergeben.
Das problem ist, dass nur das letzte handle übergeben wird und die restlichen scheinbar gelöscht sind.

Code:

function button_callback()
handles.a=plot()
handles.b=plot()
set(handles.a,'visible',off)
set(handles.b,'visible',off)

function checkbox_callback ()

if get(handles.checkbox,'value')
     set(handles.a,'visible','on')
else
    set(handles.a,'visible','off')
end

function checkbox1_callback ()
if get(handles.checkbox1,'value')
     set(handles.b,'visible','on')
else
    set(handles.b,'visible','off')
end

 


Die Übergabe funktioniert bei checkbox1 gut, aber handles.a wird in dem Fall scheinbar gelöscht bzw. wird nicht erkannt. Ich weiß absolut nicht was ich dort falsch mache das nur das eine handle erkannt wird. Ich hoffe ihr könnt mir helfen.

Vielen Dank schonmal im voraus.


Titus
Forum-Meister

Forum-Meister


Beiträge: 871
Anmeldedatum: 19.07.07
Wohnort: Aachen
Version: ---
     Beitrag Verfasst am: 29.10.2009, 16:25     Titel:
  Antworten mit Zitat      
Hallo,

eine Frage: Du übergibst nirgends die handles Struktur. Ist Dein GUI mit nested functions programmiert oder hast Du die Variablenübergabe der Einfachheithalber weggelassen. In letzterem Fall:
wenn immer an handles was geändert wird (nicht über set, sondern mit handles.xyz = ...), muss am Ende die handles-Struktur gespeichert werden! Also muss am Ende von button_callback ein
Code:
guidata(hObject, handles);

eingefügt werden.


Titus
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.10.2009, 16:44     Titel:
  Antworten mit Zitat      
die Übergabe hat ich weggelassen. Ich übergebe es so, hoffe ist richtig und ausreichend.

Code:

function Startbutton_Callback(hObject, eventdata, handles)
handles.a=...;
handles.b=...;
guidata(hObject, handles);


function checkbox_Callback(hObject, eventdata, handles)

if get(handles.checkbox,'value')
     set(handles.a,'visible','on')
else
    set(handles.a,'visible','off')
end
 


Wie gesagt ein handle erscheint ja auch richtig wenn ich aber mehrere habe wird nur der letzte verwendet und der rest ist wie gelöscht.
 
Gast

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.10.2009, 17:09     Titel:
  Antworten mit Zitat      
Mir ist noch aufgefallen, dass die handles scheinbar beite Übergeben werden aber nur der zweite (hier:b)
ausgeführt wird, bei checkbox1 tritt der Fehler "Invalid handle object" auf
in dem Fall bei Ausführung von Checkbox_Callback2 nicht

Code:

function Startbutton_Callback(hObject, eventdata, handles)
handles.a=...;
handles.b=...;
guidata(hObject, handles);


function checkbox1_Callback(hObject, eventdata, handles)

if get(handles.checkbox,'value')
     set(handles.a,'visible','on')  %hier tritt Fehler auf
else
    set(handles.a,'visible','off')
end

function checkbox2_Callback(hObject, eventdata, handles)

if get(handles.checkbox,'value')
     set(handles.b,'visible','on')
else
    set(handles.b,'visible','off')
end

 
 
Gast

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.10.2009, 08:17     Titel:
  Antworten mit Zitat      
Hallo.

Kann mir jemand helfen? Die Wertübergabe klappt, einzigiges Problem ist das ich nur den letzten Plot-handle sichtbar machen kann und den anderen nicht.
 
Oliver

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.11.2009, 20:22     Titel:
  Antworten mit Zitat      
Habe das selbe problem und krieg es auch nicht gebacken, hat wirklich niemand ne idee, wie das funzen könnte?
 
LittleX
Forum-Guru

Forum-Guru


Beiträge: 494
Anmeldedatum: 14.05.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.11.2009, 09:18     Titel:
  Antworten mit Zitat      
Hallo,

die Fehlermeldung "Invalid handle object" hört sich danach an, als ob das Objekt (z.B. der Line-Plot) inzwischen nicht mehr exisitert (z.B. weil das Fenster geschlossen wurde).

@Oliver: was genau willst Du machen? Wie sieht der Code aus und was klappt nicht?

Viele Grüße,

LittleX
Private Nachricht senden Benutzer-Profile anzeigen
 
Oliver

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.11.2009, 11:23     Titel:
  Antworten mit Zitat      
mein code sieht genau so aus wie der von gast: ich erstelle zwei plots, welche auf unsichtbar geschaltet werden und je nach dem welchen plot man sehen will, klickt man die checkbox an. mein code sieht exakt wie der 2 beiträge weiter oben. es sollen später noch mehr plots dazukommen und man soll sie sich entweder einzeln anzeigen lassen oder mehrere gleichzeitig in einem axes.
bin für jde hilfe dankbar.
 
LittleX
Forum-Guru

Forum-Guru


Beiträge: 494
Anmeldedatum: 14.05.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.11.2009, 13:08     Titel:
  Antworten mit Zitat      
Hallo,

die Frage ist, wie erzeugst Du den Plot? Der Code hier ist ja nicht vollständig (auf welche Achse wird geplottet?) . Wenn Du z.B. sowas machst:

Code:

handles.a = plot(x1);
handles.b = plot(x2);
 

dann wird standardmäßig plot a durch plot b ersetzt und damit existiert handles.a zwar noch, ist aber kein handle auf ein gültiges Objekt mehr.
Und damit kriegst Du die angegeben Fehlermeldung beim Verwenden.

Wenn Du auf unterschiedlichen Achsen plottest oder z.B. hold on verwendest, passiert das nicht.

Viele Grüße,

LittleX
Private Nachricht senden Benutzer-Profile anzeigen
 
Oliver

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.11.2009, 16:12     Titel:
  Antworten mit Zitat      
Nice, hold on war das stichwort Wink

sonst hab ich immer mit hold on gearbeitet, aber ich dachte ich brauche es nur wenn ich direkt plotte.

klappt alles super!

Danke für die schnelle Antwort!
 
Oliver

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.11.2009, 19:36     Titel:
  Antworten mit Zitat      
beantwortet!
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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 | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 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.