Verfasst am: 17.12.2016, 23:00
Titel: Re: Variablen Value in ein gui Edit Text schreiben
Hallo Thomas123,
Das erscheint mir reichlich umständlich. Welchen Vorteil hat es, wenn der Wert einer Variablen sowohl im (Base?)WorkSpace als auch im GUI steht? Das ist doch redundant. Dann würde es doch reichen den Wert nur im GUI zu haben, denn man kann ja auch von dort aus jedes Programm starten.
Man kann im Callback des Edit-UICONTROLs angeben, dass der Wert in den BaseWorkspace geschrieben wird (siehe
evalin
). Ich rate davon aber grundsätzlich ab, denn das "ferngesteuerte" Erstellen von Variablen hat das gleiche Probleme wie globale Variablen: Der Code wird unübersichtlich und fehleranfällig. Die Variablen nur im GUI zu behalten und alle Berechnungen von dort anzustoßen, ist dagegen klar und sicher.
Also ist deine Empfehlung alles, den ganzen Code in einem Gigantischen Gui File zu speichern?
Was kann ich denn noch in separate Files tun?
Funktioniert es wenn ich im Gui File meine Excel Tabelle einlese?
Speichert es mir diese Daten dann im Gui Workspace?
Ich habe dieser Matrix an Daten jede Zahl einer separaten Variable zugeordnet damit mir spätere Aufrufe und Abfragen leichter fallen:
Code:
% ------------------------------------------------------------------------ % % Hier schreibt man die Sudoku Matrix in einzelne Variablen um, um sie in % den Textedit Feldern im Gui einzufügen. % ------------------------------------------------------------------------
% ------------------------------------------------------------------------ % % Reihe A % ------------------------------------------------------------------------
Also ist deine Empfehlung alles, den ganzen Code in einem Gigantischen Gui File zu speichern?
Nein. Einerseits kann man Code nicht in einem GUI-File schreiben - was ist genau ein GUI-File? Andererseits betraf die Frage ja nur die Duplizierung einer Variablen aus "dem" Workspace (aus welchem?) in ein Text-Feld.
Zitat:
Was kann ich denn noch in separate Files tun?
Bisher war nicht von separaten Files die Rede. Daten in den ApplicationData des GUIs zu speichern oder Code in separate M-Files auszulagern sind zwei vollkommen unterschiedliche Aufgaben.
Zitat:
Funktioniert es wenn ich im Gui File meine Excel Tabelle einlese?
Funktioniert was?
Zitat:
Speichert es mir diese Daten dann im Gui Workspace?
Was speichert Dir was wo? Was meinst Du mit "Gui Workspace"? Jede Funktion hat ihren eigenen WorkSpace, denn das ist die Liste der lokalen Variablen.
Zitat:
Ich habe dieser Matrix an Daten jede Zahl einer separaten Variable zugeordnet damit mir spätere Aufrufe und Abfragen leichter fallen:
Jeder Zahl eine eigene Variable zuzuordnen ist eine Methode, die den Zugriff erschwert. Wenn Du eine Menge von Zahlen hast, sind die am besten in einem Array aufgehoben.
Globale Variablen sollte man unbedingt vermeiden, denn sie machen das Warten und Erweitern von Code unnötig kompliziert und behindern das Debuggen dramatisch.
Der gezeigte Code wäre mit einer Schleife deutlich eleganter:
Code:
Result = cell(1, 9);
for k = 1:9
Result{k} = SudokuSolving(1, k);
end
Wenn ich eine andere Zahl in das Textfeld eintippe ändert sich dann die Variable?
Am besten, wie schon gesagt, gar nicht. Es ist nicht sinnvoll die Werte von Variablen redundant mehrfach zu speichern. Das erhöht den Aufwand unnötig.
Sinnvoller ist es, die Werte nur im Text-Feld zu behalten und dann erst dynamisch auszulesen, wenn man sie benötigt, z.B. ein weiteres Programm startet.
Vielen Dank für die ausführliche Antwort ich weiss das ich ein schwieriger Fall bin.
Meine Aufgabe besteht darin ein Sudoku von einem Excel File ins Matlab zu lesen.
Dann möchte ich mit Gui die eingelesenen Daten Als Sudoku darstellen, naheliegend wäre natürlich eine Tabelle die man formatiert nur leider ist mein gui da etwas begrenzt. Also habe ich mich entschieden das ganze mit Edit Text Feldern darzustellen.
Hinzu kommen verschiedene Funktionen wie einen Sudoku Lehrer, der immer, wenn ich den "Nächste Zahl" Pushbutton drücke den nächsten Lösungsweg aufzeigt das ganze kann ich dann noch farblich praktisch untermalen.
Jetzt ist es so wenn ich ja ein neues Gui mache erstellt es mir im Matlab ein app File, dass ich ausführen kann um das gui zu starten.
Ich dachte zuerst das ich im app File von Gui nur Abfragen mache wie Reset Stop Start oder auch "Nächste Zahl" dinge ein und ausblenden usw.....
Ein matlab File wollte ich schreiben nur um die Daten auszulesen.
Ein matlab File mit dem Sofortlösung Algorithmus.
Ein matlab File mit dem Sudoku Lehrer.
Jetzt habe ich etwas einen Knoten mit dem umherschieben von Daten und ausführen von matlab Files über den Pushbutton Callback Befehl usw.^^
Meine Frage ist ist der Aufbau so wie ich ihn dargestellt habe komplett falsch bzw was muss ich beachten?
Das GUI ist der richtige Ort. um die daten vorrätig zu halten. Entweder in den einzelnen Edit-Feldern oder auch zusammen gefasst als Matrix in den Aüpplicationdata der Figure (siehe
guidata
). Wenn man dann aus dem GUI eine Unterfunktion aufruft, z.B. zum Einlesen der Daten oder den "Lehrer", greift man im Code des Callbacks auf diese gespeicherten Daten zu und übergibt sie der Unterfunktion, bzw. beim Lesen bekommt man die daten von dort und speichert sie dann wieder im GUI. Dann sind GUI und die Berechnugns-Funktionen sauber getrennt. Man könnte dann später das GUI einfach austauschen, aber alle Rechenfunktionen beibehalten. Zudem liegen keine Daten doppelt vor und man kann z.B. auch 2 GUIs gleichzeitig offen haben, ohne dass die Daten durcheinander geraten. Vielleicht gibt es ja einen Rekord im Lösen gleichzeitiger Sudokus... :-)
Das ist der Code mit dem ich die Excel Daten ins guidata einlese:
Code:
% --- Executes on button press in SudokuEinlesen. function SudokuEinlesen_Callback(hObject, eventdata, handles) % hObject handle to SudokuEinlesen (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)
handles=guidata(hObject);
set(handles.Sofortloesung, 'Enable','On');
set(handles.Lehrer, 'Enable','On');
set(handles.ZahlUmZahlMitTaste, 'Enable','On');
set(handles.ZahlUmZahlMitTimer, 'Enable','On');
Das ding ist halt das ich hier blind fliege, weil ich nicht weiss wie guidata aussieht.
???
guidata
ist eine Funktion, die den handles Struct aus den ApplicationData liest. Da ist "guidata(1,1)" nicht sinnvoll. Ich kann den Zweck dieses Aufrufs nicht erraten und deshalb auch noch keinen anderen Vorschlag machen.
Zitat:
Da diese Zuweisung 81 mal vonstatten geht kann ich das eventuell als funktion schreiben und in einem separatem m.file?
Das macht man in einer Schleife. Dazu müssten auch die Elemente "Gui_XXAA" als Matrix gespeichert sein. Was ist "Gui_XXAA"?
Vielen Dank für deine Antwort ich hab es nun geschafft^^
XX steht für das kleine Quadrat links oben im Sudoku.
AA für das erste Feld.
Reihen und Spalten Zuweisung von A - I
Quadrate Zugewiesen von X - Z
Ein Array ist zwar die schönere Lösung auf jeden Fall, aber da ich sowas wie einen Sudoku Lehrer mache muss ich die einzelnen Zellen ansprechen können um sie Farblich zu untermahlen.
Ein Array ist zwar die schönere Lösung auf jeden Fall, aber da ich sowas wie einen Sudoku Lehrer mache muss ich die einzelnen Zellen ansprechen können um sie Farblich zu untermahlen.
Und auch das geht mit einer Matrix besser. Hier könnte man dann leicht eine Zeile oder Spalte einfärben, ohne sich mit Unmengen von Variablen herumschlagen zu müssen. Wie würdest Du denn z.B. die 7. Zeile einfärben? Und wenn Du den Code dafür hast, musst Du ihn für die 8. Zeile gerade noch mal schreiben. Und für die 3. Spalte auch. Und ebenfalls für das mittlere 3x3-Kästchen.
Das geht mit Arrays so viel einfacher, dass alles andere reiner Irrsinn ist.
kriege ich die Zahl die hinter der Variable YXFA steht, ich hätte aber gerne YXFA ?
Geht das überhaupt?
Merci Jan
mfg
Thomas
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
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.