Verfasst am: 15.08.2008, 16:22
Titel: GUI ohne GUIDE erstellen
Hallo zusammen,
ich habe hier mal beispielhaft ein kleines GUI ohne GUIDE erstellt.
Es soll in erster Linie dazu dienen, die grundlegenden Möglichkeiten aufzuzeigen, ohne dabei zu komplex zu werden
Wie immer: Bei Fehlern, Ergänzungen und Vorschlägen - Immer nur her damit!
% Auslesen der Bildschirmauflösung
scrsz = get(0,'ScreenSize');
% Erstellen eines Fensters ohne Menu- und Toolbar; die Größe des Fensters % ist abhängig von der Bildschirmauflösung und sollte überall genau mittig % im gleichen Verhältnis wie der Monitor (Bsp: 4:3) erscheinen
MainWindow = figure('MenuBar','none',...
'Name','GUI - erstellt ohne GUIDE',...
'ToolBar','none',...
'Position',[.4*scrsz(3),.4*scrsz(4),...
.2*scrsz(3),.2*scrsz(4)]);
% Erstellen eines Pushbuttons (Position relativ zu den Maßen des % Hauptfensters)
handles.pushbutton1 = uicontrol(MainWindow,'Style','pushbutton',...
'String','OK',...
'FontWeight','bold',...
'FontSize',10,...
'Units','normalized',...
'Position',[.4,.375,.2,.1],...
'Callback',@pushbutton1_callback);
% Erstellen eines edit-Textfeldes (Position relativ zu den Maßen des % Hauptfensters) % Auf dieses Element kann nur über den Tag zugegriffen werden uicontrol(MainWindow,'Style','edit',...
'Tag','edit1',...
'Units','normalized',...
'FontSize',10,...
'Background','white',...
'Position',[.3,.525,.4,.1],...
'Callback',@edit1_callback);
% Erstellen einer Variable, auf welche später zugegriffen werden soll...
handles.wert1 = 'Juhu, es klappt!';
% Abspeichern der Struktur guidata(MainWindow,handles);
function pushbutton1_callback(hObject,eventdata) % laden der Stuktur
handles = guidata(hObject);
% extrahieren des eingegebenen Strings aus den edit-Feld
editstring = get(findobj('Tag','edit1'),'String');
% Wenn kein Wert eingegeben wurde, dann zeig den gespeicherten Wert an, % in Verbindung mit der Beschrifung des Pushbuttons ifisempty(editstring)
h = msgbox([handles.wert1,' - ',get(handles.pushbutton1,'String')]);
% ansonsten zeige den eingegebenen String an else
h = msgbox(editstring);
end % warte bis die Messagebox geschlossen wurde
uiwait(h);
% schließe dann das Hauptfenster close(MainWindow);
% warte eine Sekunde und öffne das Fenster erneut pause(1);
guiohneguide;
end
function edit1_callback(hObject,eventdata) % laden der Stuktur
handles = guidata(hObject);
% extrahieren des eingegebenen Strings aus den edit-Feld
editstring = get(findobj('Tag','edit1'),'String');
% Übergeben des Stings als Beschriftung des Pushbuttons set(handles.pushbutton1,'String',editstring);
% Updaten der Struktur guidata(hObject,handles);
end
super Beispiel. Hilft mir sehr beim Einstieg. Allerdings bekomm ich eine Fehlermeldung beim schließen von Mainwindow. Mir scheint, als ob der Handle nicht übergeben wird.
gibt es eine Möglichkeit, bei GUIs ohne GUIDE einen Output über eine Callback-Funktion zu erstellen? Also zum Beispiel, dass bei Aufruf eines Callbacks (z. B. PushButton) eine Variable gestzt wird, die ausgegeben wird, nachdem die GUI geschlossen wird (also als Funktions-Output):
gui_output = guiohneguide(gui_input)
Wäre nett wenn du so ein Beispiel in deinem Code ergänzen könntest.
In einem konkreten Beispiel habe ich versucht, wenn die CloseRequestFCN "psb_exi_callback" aufgerufen wird, den handles.output zu belegen. Innerhalb der Callback-Funktion existiert dieser Eintrag dann auch, aber außerhalb der Callback, ist er wieder verloren, dort brauche ich ihn aber, um die Output-Variable "welcomewin_out" zu belegen.
Weißt du oder jemand wie man die Variable aus dem Callback-Scope in den übergeordneten Scope übergeben kann?
% Make the GUI visible. set(window,'Visible','on')
% Make wolcomewin wait
uiwait(handles.window);
% Define output
welcomewin_out = handles.output;
function gui_out = psb_exi_callback(hObject,eventdata,handles) guidata(hObject,handles);
button = questdlg('Do you really want to exit?','Exit Program','Yes','No','No');
ifstrcmp(button,'No') return;
end
ifishandle(handles.window) % Set new struct variable that indicates that push button has been used
handles.output = 1;
guidata(hObject,handles) uiresume(handles.window) delete(handles.window);
end
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.