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

Variablen Value in ein gui Edit Text schreiben

 

Thomas123
Forum-Anfänger

Forum-Anfänger


Beiträge: 37
Anmeldedatum: 09.11.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.12.2016, 21:56     Titel: Variablen Value in ein gui Edit Text schreiben
  Antworten mit Zitat      
Hey Leute


Ich will das Value einer Variable die im Workspace steht in ein Edit Text in gui schreiben, wie stelle ich das an bzw. ist es überhaupt möglich?

Das ganze sollte so funktionieren das sobald ich das Value der Variable ändere das Value im edit Text ebenso ändert.

Kann man es eventuell auch so schreiben, das wenn man im Gui edit Text einen Wert ändert dies dann in die Variable geschrieben wird?

Also quasi eine Variable für den Inhalt des edit Text.


mfg

Thomas
Private Nachricht senden Benutzer-Profile anzeigen


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 17.12.2016, 23:00     Titel: Re: Variablen Value in ein gui Edit Text schreiben
  Antworten mit Zitat      
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.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Thomas123
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 37
Anmeldedatum: 09.11.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.12.2016, 23:22     Titel:
  Antworten mit Zitat      
Hey Jan

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.
% ------------------------------------------------------------------------

global SudokuSolving
SudokuSolving=SudokuMatrix;

% ------------------------------------------------------------------------
%
% Reihe A
% ------------------------------------------------------------------------

global XXAA
global XXAB
global XXAC
global XYAD
global XYAE
global XYAF
global XZAG
global XZAH
global XZAI

XXAA=SudokuSolving(1,1);
XXAB=SudokuSolving(1,2);
XXAC=SudokuSolving(1,3);
XYAD=SudokuSolving(1,4);
XYAE=SudokuSolving(1,5);
XYAF=SudokuSolving(1,6);
XZAG=SudokuSolving(1,7);
XZAH=SudokuSolving(1,8);
XZAI=SudokuSolving(1,end);


Wie kann ich denn jetzt zum Beispiel XXAA einem Textfeld zuweisen?
Wenn ich eine andere Zahl in das Textfeld eintippe ändert sich dann die Variable?


mfg

Thomas
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 18.12.2016, 18:46     Titel:
  Antworten mit Zitat      
Hallo Thomas123,

Zitat:
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

Der Aufbau ist klar und man hat weniger möglichkeiten sich zu vertippen.

Zitat:
Wie kann ich denn jetzt zum Beispiel XXAA einem Textfeld zuweisen?

Das kommt darauf an, was in XXAA steht. An sich aber einfach mit:
Code:
set(handles.TextH, 'String', XXAA)


Zitat:
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.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Thomas123
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 37
Anmeldedatum: 09.11.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.12.2016, 19:51     Titel:
  Antworten mit Zitat      
Hallo Jan

Vielen Dank für die ausführliche Antwort ich weiss das ich ein schwieriger Fall bin. Rolling Eyes

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?

Vielen Dank für Deine Mühe


mfg

Thomas
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 19.12.2016, 19:59     Titel:
  Antworten mit Zitat      
Hallo Thomas123,

Gut.

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... :-)

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Thomas123
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 37
Anmeldedatum: 09.11.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.12.2016, 22:19     Titel:
  Antworten mit Zitat      
Hey Jan

Alles klar dann beschäftige ich mich mit dem guidata und starte durch übers Wochenende.^^

merci Jan


mfg

Thomas
Private Nachricht senden Benutzer-Profile anzeigen
 
Thomas123
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 37
Anmeldedatum: 09.11.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.12.2016, 15:58     Titel:
  Antworten mit Zitat      
Hey Jan

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');

handles.fileName = uigetfile('*.xlsx');
guidata(hObject, handles)


Nun zu meinen Fragen.

Wie kann ich eine Datenzelle zum Beispiel A1 des ursprünglichen Excel Files einem Edit Text zuordnen?

Das ding ist halt das ich hier blind fliege, weil ich nicht weiss wie guidata aussieht.
So in etwa habe ich mir das vorgestellt:
Code:
set(Gui_XXAA, 'string', num2string(guidata(1,1)));



Da diese Zuweisung 81 mal vonstatten geht kann ich das eventuell als funktion schreiben und in einem separatem m.file?


mfg

Thomas
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 26.12.2016, 21:03     Titel:
  Antworten mit Zitat      
Hallo Thomas123,

Zitat:
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"?

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Thomas123
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 37
Anmeldedatum: 09.11.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.12.2016, 00:08     Titel:
  Antworten mit Zitat      
Hey Jan

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.

mfg

Thomas
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 28.12.2016, 14:32     Titel:
  Antworten mit Zitat      
Hallo Thomas123,

Zitat:
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.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Thomas123
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 37
Anmeldedatum: 09.11.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.01.2017, 16:39     Titel:
  Antworten mit Zitat      
Hallo Jan


Also die Matrix würde bei mir dann so aussehen:

Code:
SudokuMatrix_A_Z = [XXAA, XXAB, XXAC, XYAD, XYAE, XYAF, XZAG, XZAH, XZAI;
                    XXBA, XXBB, XXBC, XYBD, XYBE, XYBF, XZBG, XZBH, XZBI;
                    XXCA, XXCB, XXCC, XYCD, XYCE, XYCF, XZCG, XZCH, XZCI;
                    YXDA, YXDB, YXDC, YYDD, YYDE, YYDF, YZDG, YZDH, YZDI;
                    YXEA, YXEB, YXEC, YYED, YYEE, YYEF, YZEG, YZEH, YZEI;
                    YXFA, YXFB, YXFC, YYFD, YYFE, YYFF, YZFG, YZFH, YZFI;
                    ZXGA, ZXGB, ZXGC, ZYGD, ZYGE, ZYGF, ZZGG, ZZGH, ZZGI;
                    ZXHA, ZXHB, ZXHC, ZYHD, ZYHE, ZYHF, ZZHG, ZZHH, ZZHI;
                    ZXIA, ZXIB, ZXIC, ZYID, ZYIE, ZYIF, ZZIG, ZZIH, ZZII];


Nun zu den Fragen wie picke ich mir z.B alle Variablen mit den Buchstaben (XX) am anfang heraus?

Wie kann man einen Zähler machen der die einzelnen Variablen der Reihe nach aufzählt und nicht die dahinter stehenden Zahlen?

Wenn ich ja zum Beispiel schreibe:

Code:
SudokuMatrix_A_Z(5)


kriege ich die Zahl die hinter der Variable YXFA steht, ich hätte aber gerne YXFA ?
Geht das überhaupt?

Merci Jan


mfg

Thomas
Private Nachricht senden Benutzer-Profile anzeigen
 
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.