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

GUI stoppt nach einmaliger Ausführung eines Callbacks

 

Krautinator
Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 18.03.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.03.2013, 00:22     Titel: GUI stoppt nach einmaliger Ausführung eines Callbacks
  Antworten mit Zitat      
Liebe Freunde der Sonne.
Sitze hier an einem recht dringenden Problem, das ich ehrlich gesagt überhaupt nicht verstehe. Ich entwickle ein GUI für ein simples Programm, in dem es lediglich darum gehen soll, eine Matrix aus Nullen und Einsen anzuzeigen und per Klick durch Maus den jeweiligen Wert in der Matrix zu invertieren.
Ich führe den Code aus > leere Matrix wird angezeigt > ich klicke auf ein Feld > das Feld wird schwarz und die Position über die Konsole ausgegeben > das Programm bricht ohne Fehlermeldung ab.
Eigentlich soll der Benutzer beliebig oft die Matrix bearbeiten können, eh es weitergeht. Vielleicht könnt ihr mir verraten, wo mein Denkfehler liegt. Hier der Code:

Code:
function varargout = GOL_gui(varargin)

% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...
                   'gui_Singleton',  gui_Singleton, ...
                   'gui_OpeningFcn', @GOL_gui_OpeningFcn, ...
                   'gui_OutputFcn',  @GOL_gui_OutputFcn, ...
                   'gui_LayoutFcn',  [] , ...
                   'gui_Callback',   []);
if nargin && ischar(varargin{1})
    gui_State.gui_Callback = str2func(varargin{1});
end

if nargout
    [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
    gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT

function GOL_gui_OpeningFcn(hObject, eventdata, handles, varargin)
handles.output = hObject;
global M geszeilen gesspalten
geszeilen = 20;
gesspalten = 20;
M = zeros( geszeilen, gesspalten );
colormap(gray);
axis equal
set(handles.axes1,'XLim',[1 gesspalten+1],'YLim',[ 1 geszeilen+1 ]);
set(handles.axes1,'XTick',1:(gesspalten+1),'YTick',1:(geszeilen+1));
set(handles.axes1,'xticklabel',[],'yticklabel',[]);
set(handles.axes1,'GridLineStyle','-','XGrid','on','YGrid','on');

guidata(hObject, handles);

function varargout = GOL_gui_OutputFcn(hObject, eventdata, handles)

varargout{1} = handles.output;

function axes1_ButtonDownFcn(hObject, eventdata, handles)
global M geszeilen gesspalten
pos=get(hObject,'CurrentPoint');
disp(['You clicked X:',num2str(floor(pos(1,1))),', Y:',num2str(floor(pos(1,2)))]);
M(floor(geszeilen+2-pos(1,2)),floor(pos(1,1))) = -1 * ( M(floor(geszeilen+2-pos(1,2)),floor(pos(1,1))) - 1 );
axes(handles.axes1);
imagesc((1:gesspalten)+0.5,(1:geszeilen)+0.5,-1*M+1);
colormap(gray);
axis equal

set(handles.axes1,'XLim',[1 gesspalten+1],'YLim',[ 1 geszeilen+1 ]);
set(handles.axes1,'XTick',1:(gesspalten+1),'YTick',1:(geszeilen+1));
set(handles.axes1,'xticklabel',[],'yticklabel',[]);
set(handles.axes1,'GridLineStyle','-','XGrid','on','YGrid','on');

function pushbutton2_ButtonDownFcn(hObject, eventdata, handles)


Vielen Dank für eure Hilfe Smile
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 18.03.2013, 08:51     Titel:
  Antworten mit Zitat      
Hallo,

bitte auch die zugehörige Figure posten, damit man das nachvollziehen kann.

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

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 18.03.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.03.2013, 10:22     Titel:
  Antworten mit Zitat      
Bitte entschuldigt. Ich habe mal die beiden Dateien beigefügt, da ich im Quelltext oben ein paar Zeilen der Übersichtlichkeit halber entfernt habe.

GOL_gui.m
 Beschreibung:

Download
 Dateiname:  GOL_gui.m
 Dateigröße:  2.3 KB
 Heruntergeladen:  330 mal
GOL_gui.fig
 Beschreibung:

Download
 Dateiname:  GOL_gui.fig
 Dateigröße:  4.64 KB
 Heruntergeladen:  353 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 18.03.2013, 11:42     Titel:
  Antworten mit Zitat      
Hallo,

es sieht so aus, als ob die Information 'ButtonDownFcn' beim Plotten überschrieben wird.

Hierzu gibt es auch in der Hilfe Andeutungen:
http://www.mathworks.com/help/relea.....atlab/ref/axes_props.html (unter ButtonDownFcn)

Ich habe versucht, die ButtonDownFcn manuell wieder zurückzusetzen, aber das hat nicht geklappt. Insofern habe ich hier erstmal auch keine Abhilfe, außer den Rat aus der Hilfe, mit PATCH zu arbeiten.

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

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 18.03.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.03.2013, 17:28     Titel:
  Antworten mit Zitat      
Tausend Dank für die schnelle Antwort! Dass das daran liegen könnte, dass der beim Plotten die Funktion überschreibt, wäre mir nicht aufgefallen Wink

Ich habe es jetzt so gemacht, dass ich den Klick nicht über die Axes, sondern über das Fenster an sich abfrage. Das kann ich aber auch nur machen, weil ich nur einen einzigen Plot habe.

Jetzt habe ich noch das kleine Problem, dass der beim ersten Klick den Punkt an der falschen Höhe (Y, quasi an der Mitte gespiegelt) platziert. Aber halt nur beim ersten Klick. Woran könnte das liegen??

Die neuen Dateien dazu im Anhang.


Nochmal vielen, vielen Dank! Smile

GOL_gui.m
 Beschreibung:

Download
 Dateiname:  GOL_gui.m
 Dateigröße:  2.61 KB
 Heruntergeladen:  331 mal
GOL_gui.fig
 Beschreibung:

Download
 Dateiname:  GOL_gui.fig
 Dateigröße:  4.64 KB
 Heruntergeladen:  332 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

bevor du das erste "Bild" plottest, ist die y-Achse "normal" ausgerichtet. Sobald ein Bild geplottet wird, wird die y-Achse jedoch von oben nach unten ("reverse") ausgerichtet.

Abhilfe: Nimm in deine OpeningFcn folgenden Code auf:
Code:
set(handles.axes1, 'YDir', 'reverse')


Damit wird die y-Achse von Anfang an 'reverse' ausgerichtet.

Ich muss sagen, ich habe das Game of Life (darum geht es hier ja sicher?) auch schon implementiert, bin aber immer von zufälligen Anfangsbevölkerungen ausgegangen. Das macht's deutlich einfacher :)

Grüße,
Harald

P.S.: die Verwendung globaler Variablen ist gerade in dem Umfang verpönt. Für Alternativen siehe hier:
http://www.mathworks.de/de/help/mat.....-data-in-a-guide-gui.html
Die beste Variante ist meiner Ansicht nach "Application Data".
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 - 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.