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

Mehrzeiliges edit Feld für lange Text ausgabe in Gui nutzen

 

Localhorst
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 86
Anmeldedatum: 18.02.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.05.2008, 15:53     Titel: Mehrzeiliges edit Feld für lange Text ausgabe in Gui nutzen
  Antworten mit Zitat      
Hallo Forum,

ich habe ein Gui, welches eine ganze Stange an daten verarbeitet. Um den User etwas auf dem Laufendem zu halten gebe ich immer mal wieder eine Textzeile aus, die sagt, bei welchem Schritt das Script gerade ist.

Der Text wird in dem Gui in einem Mehrzeiligen edit Feld angezeigt.
Beim ersten Durchlauf klappt das auch.

Beim zweiten Durchlauf klappt es aber nicht mehr, da die Dimensionen für das horzcat nicht stimmen. (siehe Fehlermeldung)

Im Debugger sehe ich auch, das mein Text zu einer 9x37 char matrix geworden ist. Wie kann ich nun weiteren Text an diese Matrix anhängen?

Vielen Dank schon einmal für eure Mühe



Code:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%  MAIN
old_multitext=get(multitext_handle,'String');
line='-------------------------------------';

multitext=sprintf([old_multitext '\n' line '\nprocessing:' ...
    img_file '\n\tsplit image into tiles.\n']);
%get tiles of image
set(multitext_handle,'String',multitext);
set(multitext_handle,'HandleVisibility'.'on');
tiles = b_gli_getTiles(img_path);
%save rescaled image
multitext=sprintf([multitext '\n\trescaling overview image']);
set(multitext_handle,'String',multitext);
set(multitext_handle,'HandleVisibility'.'on');
b_rescale(tiles,img_file);
%calc threshold
multitext=sprintf([multitext '\n\tcalculating threshold.']);
set(multitext_handle,'String',multitext);
set(multitext_handle,'HandleVisibility'.'on');
threshold = b_gli_calc_thresh(path, radius1, radius2);
%calc GLI image
multitext=sprintf([multitext '\n\tcalculating gli image.\n']);
set(multitext_handle,'String',multitext);
set(multitext_handle,'HandleVisibility'.'on');
gli_img = b_gli_calc_img_file(tiles, threshold, radius1, radius2, maxVal,img_file);

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 


Code:
K>> multitext=sprintf([old_multitext '\n' line '\nprocessing:' ...
    img_file '\n\tsplit image into tiles.\n']);
??? Error using ==> horzcat
CAT arguments dimensions are not consistent.
 
Private Nachricht senden Benutzer-Profile anzeigen


tompie
Forum-Guru

Forum-Guru


Beiträge: 260
Anmeldedatum: 19.09.07
Wohnort: München
Version: immer alles
     Beitrag Verfasst am: 06.05.2008, 16:38     Titel:
  Antworten mit Zitat      
Hallo,

Du brauchst eigentlich nur den bestehenden Text auslesen, eine neue Zeile dranhängen (als cell array) und wieder zurückschreiben.

Code:
function AutoPrompter(text)

h=findobj('Tag','DeinTagName','style','edit');
text_alt=get(h,'String');
text_neu=[text_alt;text];
set(h,'String',text_neu);


Gruß tompie
Private Nachricht senden Benutzer-Profile anzeigen
 
Localhorst
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 86
Anmeldedatum: 18.02.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.05.2008, 08:18     Titel:
  Antworten mit Zitat      
HI,

das klappt leider auch nicht. Ich habe den Code nach deiner Idee angepasst. Hoffe das ich keinen neuen Fehler eingebaut habe....

Code:
old_multitext=get(multitext_handle,'String');
line='-------------------------------------';
multitext=[old_multitext;line;['\nprocessing:' img_file];'\tsplit image into tiles.'];


Fehlermeldung:

Code:
??? Error using ==> vertcat
CAT arguments dimensions are not consistent.
 
Private Nachricht senden Benutzer-Profile anzeigen
 
steve
Ehrenmitglied

Ehrenmitglied



Beiträge: 2.029
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2024a
     Beitrag Verfasst am: 07.05.2008, 08:42     Titel:
  Antworten mit Zitat      
Hmm, ich denke da hat sich ein kleiner Fehler in tompies Post eingeschlichen. Es musssp heißen, denke ich:
Code:

multitext={old_multitext;line;['\nprocessing:' img_file];'\tsplit image into tiles.'};
 

Es müssen also geschweifte Klammern sein, damit es funktioniert. Denn in Vektoren und Matrizen müssen die Strings immer gleich lang sein.

Gruß
Alex
_________________

>> I told me to.

____________________________________
Matlab Cheat Sheet
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
tompie
Forum-Guru

Forum-Guru


Beiträge: 260
Anmeldedatum: 19.09.07
Wohnort: München
Version: immer alles
     Beitrag Verfasst am: 07.05.2008, 09:16     Titel:
  Antworten mit Zitat      
Hallo,

dann haben wir hier ein Versionsproblem. Bei meiner Matlab-Version (2006b) funktioniert es einwandfrei: Alles wird korrekt in ein cell array gewandelt. Evtl. funktioniert es dann nicht, wenn das edit-Feld am Anfang leer ist. Dann liefert get(h,'String') evtl. wirklich einen (leeren) String zurück Crying or Very sad

Deshalb ist Steve's Version natürlich besser, da versionsunabhängig.

Gruß tompie
Private Nachricht senden Benutzer-Profile anzeigen
 
Localhorst
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 86
Anmeldedatum: 18.02.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.05.2008, 10:42     Titel:
  Antworten mit Zitat      
Vielen Dank für eure Hilfe,

leider komme ioch damit immer noch nicht ans Ziel.
Die geschweifte Klammer hilft auf jeden Fall schon mal.

Leider klappt ein weiteres hinzufühgen immer noch nicht.

Code:

multitext={old_multitext;line;['processing:' img_file];'split image into tiles.'};
%get tiles of image
set(multitext_handle,'String',multitext);
tiles = b_gli_getTiles(img_path);
%save rescaled image
multitext={multitext; '\n\trescaling overview image'};
set(multitext_handle,'String',multitext);


Das erste einfügen in das CellArray klappt.

Beim zweiten meckert er dann, im Debugger sieht man auch das die zweite Zeile nicht korrekt angehängt wurde.

Code:
multitext =

    {4x1  cell}
    '\n\trescaling overview image'
 


Die Zeile sollte halt zu einem {5x1 cell} führen und nicht einzeln in dem Array aufgefürt werden.

Und nochmals vielen Dank, dass ihr euch die Zeit bis hier hin schon einmal genommen habt.

Gruß
Localhorst
Private Nachricht senden Benutzer-Profile anzeigen
 
Localhorst
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 86
Anmeldedatum: 18.02.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.05.2008, 10:54     Titel:
  Antworten mit Zitat      
OK, Problem scheint gelöst!

Habe mal einige Links in der Hilfe verfolgt und bin auf die Lösung gestoßen.

Die weiteren Elemente müßen mit der [] konkateniert werde, dann geht es.
Private Nachricht senden Benutzer-Profile anzeigen
 
Martin3000

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.05.2010, 10:41     Titel:
  Antworten mit Zitat      
Was meinst Du mit "die neuen Elemente müssen mit [] konkateniert werden"?

Ich habe das Problem, dass es einwandfrei funktioniert, so lange die Zeilen die genau selbe Länge haben. Sobald wir eine Stelle mehr oder weniger haben, gibt es eine Fehlermeldung (die Zahl in temp_matrix(k,5) hat stets verschiedenen Stellen.)

Leider geben geschweifte Klammern bei mir grundsätzlich eine Fehlermeldung...

Code:

trade_entry = get(handles.tradelist,'String');

neuer_trade=sprintf([num2str(temp_matrix(k,2)) '\b' num2str(temp_matrix(k,1)) '\b' num2str(temp_matrix(k,4)) '\b' 'B' '\b' num2str(temp_matrix(k,5))]);

trade_entry=[neuer_trade; trade_entry];

set(handles.tradelist,'String',trade_entry)
 
 
Martin3000

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.05.2010, 07:21     Titel:
  Antworten mit Zitat      
Eine Lösung die ich nun gefunden habe, ist die alte Matrix als cell array einzulesen, dadurch wird die Größe flexibel...

Der Code von oben sähe also so aus:

Code:


trade_entry = cell(get(handles.tradelist,'String'));

neuer_trade=sprintf([num2str(temp_matrix(k,2)) '\b' num2str(temp_matrix(k,1)) '\b' num2str(temp_matrix(k,4)) '\b' 'B' '\b' num2str(temp_matrix(k,5))]);

trade_entry=[neuer_trade; trade_entry];

set(handles.tradelist,'String',trade_entry)

 
 
Sunny McMatlab

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.06.2010, 13:46     Titel:
  Antworten mit Zitat      
Hallo!

Ich mache ebenfalls eine Ausgabe in ein Edit feld. Das klappt grundsätzlich auch. Ich möchte bei jedem durchlauf einer Schleiffe eine neue Nachricht ausgeben um so den Benutzer auf dem laufenden zu halten. Allerdings werden die Nachrichten nicht in "echtzeit" ausgegeben, sondern erst wenn das programm einmal durchgelaufen ist.

Muss ich beim edit-feld noch irgendwas einstellen, von wegen aktualisieren zur laufzeit oder ich weiß es nicht????

Danke!
 
Martin3000

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.06.2010, 17:31     Titel:
  Antworten mit Zitat      
Das kann ich mir nicht vorstellen. Die Ausgabe sollte genau dann stattfinden, wenn das Programm die Code-Zeile aufruft.

Wenn also die Schleife in t=1 beginnt, Du in t=3 die Textausgabe machst und die Schleife danach aber noch eine Weile läuft, sagen wir bis t=5, dann sollte die Ausgabe im GUI in t=3 erscheinen.
 
Lord nibbler

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.06.2010, 07:43     Titel:
  Antworten mit Zitat      
Hallo,
schreib mal ein
Code:

nach erweitern des Editfeldes

Gruß Lord nibbler
 
Sunny McMatlab

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.06.2010, 14:49     Titel:
  Antworten mit Zitat      
Geil! Das mit dem DrawNow hat geholfen! Very Happy Very Happy Very Happy Very Happy
Mega geil jetzt!

DAAAANKE!
 
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 - 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.