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

Excel Datei in GUI laden

 

Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 09.05.2018, 12:21     Titel:
  Antworten mit Zitat      
Hallo,

1. So wie du es auch bisher machst.
2. Am besten sobald die Daten bekannt sind. Das passiert typischerweise in der StartupFcn oder im Callback eines Buttons oder Menüs, über das die Daten geladen werden.
3. Wie gesagt: in die Callbacks der Popupmenüs schreibst du das, was nach Auswahl einer Option passieren soll.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen


Nester
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 29
Anmeldedatum: 17.04.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.05.2018, 12:22     Titel:
  Antworten mit Zitat      
Hallo,
ich komme leider nicht weiter mit dem hinterlegen der Zahlen des Popupmenus mit den richtigen Ellipsen.
Kannst du mir nicht ein code Beispiel geben?
Du meintest ja, ich soll in alle drei funktionen ( [code]function popupmenuLw1_Callback(hObject, eventdata, handles)[/code] jeweils den coder zum plotten der Ellipsen packen.
Ich weiß einfach nicht wie...
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 10.05.2018, 19:47     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Kannst du mir nicht ein code Beispiel geben?

Code:
handles.popupmenu1.String = ...

Das wird wohl wenig helfen, aber mehr kann ich leider nicht schreiben ohne das konkrete Problem zu kennen.

Zitat:
ich komme leider nicht weiter

Und wieder ist die Frage: was versuchst du konkret (bitte Codebeispiel) und welche Probleme treten dabei auf?

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Nester
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 29
Anmeldedatum: 17.04.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.05.2018, 10:06     Titel:
  Antworten mit Zitat      
Ok,
ich weiß nicht, ob ich die Excel Datei aus dem Labor veröffentlich darf, deswegen hier eine abgespeckte Version. Die funktioniert zwar nur teilweise, sollte aber zur Verdeutlichung reichen.

Aaalso:
1. müsstest du die Excel-Datei in eine csv Datei ändern, die darf man hier nicht hochladen. (Oder in Line 89 des mainGui.m das *.csv ändern, aber wem sage ich das Smile )

2. Wenn du das Programm ausführst, siehst du, das aktuell alle Ellipsen geplottet werden, genau das möchte ich aber nicht. Rechts neben dem Graphen siehst du meine 3 Popupmenu's. Diese sollen dazu dienen, den Lastwechsel auszuwählen, der geplottet wird.

Der Ablauf nach Programmstart sollte also in etwa sein:
- .csv Datei laden
- for-Schleife berechnet Regressionsparameter der Ellipse
- Tabelle wird mit Regressionsparametern gefüllt
- Benutzer wählt mit Hilfe der Popupmenu's aus, welche Ellipse geplottet wird.


Zu den Popupmenu's: es sollen immer auch nur 3 Ellipsen angezeigt werden. Also wenn ich in Popupmenu 1 den 110. Lw anwähle und danach den 58. soll der 110. wieder verschwinden.

Ich hoffe, das du mir mit den Infos helfen kannst. Danke schon einmal für deine Mühen.

VG
Fabian


Edit: Aufgrund meines gefährlichen Halbwissen bzgl. MatLab habe ich einen sehr unsauberen Programmierstil. Ich hoffe du steigst dennoch durch.

MatLabForum.xls
 Beschreibung:

Download
 Dateiname:  MatLabForum.xls
 Dateigröße:  1.01 MB
 Heruntergeladen:  395 mal
mainGui.fig
 Beschreibung:

Download
 Dateiname:  mainGui.fig
 Dateigröße:  28.88 KB
 Heruntergeladen:  378 mal
mainGui.m
 Beschreibung:

Download
 Dateiname:  mainGui.m
 Dateigröße:  15.27 KB
 Heruntergeladen:  392 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Goraker
Forum-Anfänger

Forum-Anfänger


Beiträge: 30
Anmeldedatum: 04.04.18
Wohnort: ---
Version: R2016b
     Beitrag Verfasst am: 11.05.2018, 11:15     Titel:
  Antworten mit Zitat      
Damit kann ich jetzt etwas anfangen.

Dein Problem ist, das du dein Plot variablen xRotation und yRotation in der Forschleife immer wieder überschreibst und diese direkt in der Schleife Plottest.

mein Vorschlag ist daher:
definiere am Anfang
Code:

x_all=[];
y_all=[];
 


Am Ende deiner For-Schleife fügst du dann anstatt dem Plot Befehl

Code:

    x_all=[x_all, xRotated];
   
    y_all=[y_all, yRotated];
 


das Ergibt dann zwei 1000x67 Matrizen in denen alle Ellipsen stehen.

im nächsten Schritt kannst du dann NACH der For-Schleife (Wichtig: Außerhalb)
Deine Ellipsen plotten
Code:

plot(x_all(:,10), y_all(:,10));
plot(x_all(:,19), y_all(:,19));
plot(x_all(:,24), y_all(:,24));
 


Die Zahlen ersetzt du dann am besten mit den Variablen, die du aus deinen Popups bekommst. (Die Variable habe ich auf die schnelle nicht gefunden)



Für das Updaten haben ich eine Frage. Willst du direkt nach der Auswahl der Ellipse die axes1 aktualisieren oder willst du alle drei Popups anpassen und bei betätigen des Update-Buttons soll alles aktualisiert werden?

Im Fall zwei wurde ich das in das Push-Button menü schreiben
Code:

axes(handles.axes1);
cla reset;
plot(x_all(:,30), y_all(:,30));
plot(x_all(:,31), y_all(:,31));
plot(x_all(:,32), y_all(:,32));
 


Hier natürlich ebenfalls die variablen der PopUps einfügen anstatt der Zahlen
Private Nachricht senden Benutzer-Profile anzeigen
 
Nester
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 29
Anmeldedatum: 17.04.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.05.2018, 14:54     Titel:
  Antworten mit Zitat      
Hallo,
der Button ist noch ein Überbelibsel aus vorherigen Versuchen. Der soll eigentlich weg.
axes1 soll sich demnach von selber Updaten, sobald man einen anderen Lastwechsel auswählt.
So sieht das jetzt aus:

[code]for i = 1:handles.ngroups-1
handles.Daten = handles.files(handles.groupends(i)+1:handles.groupends(i+1),[9 10])
guidata(hObject, handles);

% tableDaten(i,Smile = handles.Daten;
handles.x_all = [];
handles.y_all = [];[/code]

Vor dem Ende der for-Schleife

[code]
handles.x_all = [handles.x_all, xRotated];
handles.y_all = [handles.y_all, yRotated];
end
[/code]

Und der aktuell noch vorhandene Pushbutton:

[code]
function pushbutton5_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton5 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% axes(handles.axes1);
% popup_index = get(handles.popupmenuLw1, 'Value');
axes(handles.axes1);
cla(handles.axes1);

plot(handles.x_all(handles.popupmenuLw1,Smile, handles.y_all(handles.popupmenuLw1,Smile);
plot(handles.x_all(handles.popupmenuLw2,Smile, handles.y_all(handles.popupmenuLw2,Smile);
plot(handles.x_all(handles.popupmenuLw3,Smile, handles.y_all(handles.popupmenuLw3,Smile);
[/code]


Wenn ich nun die Lastwechsel wähle und auf Update drücke, kommt folgendes:

Function 'subsindex' is not defined for values of class 'matlab.ui.control.UIControl'.

Error in mainGui>pushbutton5_Callback (line 437)
plot(handles.x_all(handles.popupmenuLw1,Smile, handles.y_all(handles.popupmenuLw1,Smile);

Error in gui_mainfcn (line 95)
feval(varargin{:});

Error in mainGui (line 42)
gui_mainfcn(gui_State, varargin{:});

Error in matlab.graphics.internal.figfile.FigFile/read>@(hObject,eventdata)mainGui('pushbutton5_Callback',hObject,eventdata,guidata(hObject))

Error while evaluating UIControl Callback.
Private Nachricht senden Benutzer-Profile anzeigen
 
Goraker
Forum-Anfänger

Forum-Anfänger


Beiträge: 30
Anmeldedatum: 04.04.18
Wohnort: ---
Version: R2016b
     Beitrag Verfasst am: 11.05.2018, 15:10     Titel:
  Antworten mit Zitat      
Setzte mal in die Fehlerzeile 437 einen Breakpoint und lasse das Programm da hin Laufen.

Und dann geben im Command Window mal nacheinander die Variablen ein und schau ob Sie das ergeben das sie sein sollten.
Code:


handles.popupmenuLw1
handles.popupmenuLw2
handles.popupmenuLw3

handles.x_all(10,:)
handles.x_all(handles.popupmenuLw1,:)

handles.y_all(10,:)
handles.y_all(handles.popupmenuLw1,:)

 


Schreib dann am besten welchen richtig sind und bei denen, die falsch sind, den kompletten Fehler.
Private Nachricht senden Benutzer-Profile anzeigen
 
Nester
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 29
Anmeldedatum: 17.04.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.05.2018, 21:22     Titel:
  Antworten mit Zitat      
Hallo Goraker,

[code]
handles.popupmenuLw1
handles.popupmenuLw2
handles.popupmenuLw3

handles.x_all(10,Smile[/code]

Dies führt er alles ohne Probleme aus, aber bei
[code]handles.x_all(handles.popupmenuLw1,Smile[/code]
heißt es
"K>> handles.x_all(handles.popupmenuLw1,Smile
Function 'subsindex' is not defined for values of class 'matlab.ui.control.UIControl'."
Private Nachricht senden Benutzer-Profile anzeigen
 
Goraker
Forum-Anfänger

Forum-Anfänger


Beiträge: 30
Anmeldedatum: 04.04.18
Wohnort: ---
Version: R2016b
     Beitrag Verfasst am: 14.05.2018, 08:20     Titel:
  Antworten mit Zitat      
Bekommst du für handles.popupmenuLw1 auch das hier?

Code:

handles.popupmenuLw1

ans =

  UIControl (popupmenuLw1) with properties:

              Style: 'popupmenu'
             String: [67×2 char]
    BackgroundColor: [1 1 1]
           Callback: @(hObject,eventdata)mainGui('popupmenuLw1_Callback',hObject,eventdata,guidata(hObject))
              Value: 3
           Position: [202 53.2308 17.8000 1.5385]
              Units: 'characters'
 


Du musst in dem Fall noch definieren was genau du haben willst. da du nur den Wert von Value haben willst

Code:

handles.popupmenuLw1.Value
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Nester
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 29
Anmeldedatum: 17.04.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.05.2018, 09:48     Titel:
  Antworten mit Zitat      
Hallo,
also ich habe den pushbutton_callback jetzt so geändert:

[code]% Update figure
function pushbutton5_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton5 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% axes(handles.axes1);
% popup_index = get(handles.popupmenuLw1, 'Value');

cla(handles.axes1);
axes(handles.axes1);

plot(handles.x_all(handles.popupmenuLw1.Value,Smile, handles.y_all(handles.popupmenuLw1.Value,Smile);
plot(handles.x_all(handles.popupmenuLw2.Value,Smile, handles.y_all(handles.popupmenuLw2.Value,Smile);
plot(handles.x_all(handles.popupmenuLw3.Value,Smile, handles.y_all(handles.popupmenuLw3.Value,Smile);[/code]

Ich erhalte zwar keinen Fehler mehr, wenn ich in dem GUI jetzt beim Popupmenu andere Lw auswähle, allerdings passiert auch nichts.

Und wie gesagt, es soll eigentlich ohne den Update Knopf funtkionieren. Am liebsten wäre es mir, wenn die axes sich jedes mal von selbst aktualisiert, wenn ich einen anderen Lw auswähle.
Private Nachricht senden Benutzer-Profile anzeigen
 
Goraker
Forum-Anfänger

Forum-Anfänger


Beiträge: 30
Anmeldedatum: 04.04.18
Wohnort: ---
Version: R2016b
     Beitrag Verfasst am: 14.05.2018, 10:23     Titel:
  Antworten mit Zitat      
Der Updateknopf bewirkt gar nichts?

Theoretisch müsste der Code des Updateknopfs auch in den drei Popupmenus funktionieren. Das habe ich aber noch nie ausprobiert
Private Nachricht senden Benutzer-Profile anzeigen
 
Nester
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 29
Anmeldedatum: 17.04.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.05.2018, 10:42     Titel:
  Antworten mit Zitat      
Die x und y Skalierung ändert sich, es wird aber keine Ellipse geplottet :/


Kannst du mir erklären, was der Tipp von Harald auf sich hat, mit x_all und y_all?
Ich habe versucht es nachzuvollziehen, komme aber nicht drauf.
Warum wird das ein 1000 Zeilen langer Vektor?
Der wird übrigens in jedem Schleifendurchlauf überschrieben, vielleicht liegt da der Fehler?

Zuletzt bearbeitet von Nester am 14.05.2018, 10:59, insgesamt einmal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen
 
Goraker
Forum-Anfänger

Forum-Anfänger


Beiträge: 30
Anmeldedatum: 04.04.18
Wohnort: ---
Version: R2016b
     Beitrag Verfasst am: 14.05.2018, 10:53     Titel:
  Antworten mit Zitat      
Weches Ergebnis bekommst du jetzt über Brakpoints, wenn du

handles.x_all(handles.popupmenuLw1.Value,Smile
und
handles.popupmenuLw1.Value

eingibst?
Private Nachricht senden Benutzer-Profile anzeigen
 
Nester
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 29
Anmeldedatum: 17.04.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.05.2018, 11:05     Titel:
  Antworten mit Zitat      
Ich bin soo doof...
Ich habe Haralds Hinweis nicht genau gelesen..
Ich dachte mit "definiere am Anfang x_all= [];" meint er, am Anfang der for-schleife...

Ich habe dann mit dem Debugger herausgefunden, das er x_all immer wieder überschreibt...
Ich habe x_all jetzt vor der for-schleife definiert und siehe da, es funtkioniert.

Ich denke, ich bin jetzt erstmal fertig. Melde mich aber, wenn ich wieder Hilfe brauche.

Tausend dank an Goraker und Harald für eure Hilfe Smile!

Edit: Wie kann ich denn jetzt "einstellen", das er nur die Ellipse des ersten Popupmenus löscht, wenn ich dort einen anderen Lw wähle.

wenn ich "cla(handles.axes1)" in alle drei callbacks schreibe, löscht er immer alle Ellipsen beim neu auswählen!
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite Zurück  1, 2, 3

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.