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 ohne GUIDE erstellen

 

steve
Ehrenmitglied

Ehrenmitglied



Beiträge: 2.028
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2024a
     Beitrag Verfasst am: 15.08.2008, 16:22     Titel: GUI ohne GUIDE erstellen
  Antworten mit Zitat      
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 Wink

Wie immer: Bei Fehlern, Ergänzungen und Vorschlägen - Immer nur her damit!

Code:

%% guiohneguide.m

function guiohneguide

% 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
        if isempty(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

end
 


Gruß
Alex

guiohneguide.m
 Beschreibung:

Download
 Dateiname:  guiohneguide.m
 Dateigröße:  2.95 KB
 Heruntergeladen:  2155 mal

_________________

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


Fire

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.07.2011, 15:09     Titel: Danke
  Antworten mit Zitat      
Hallo,

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.

Grüße,
Fire
 
steve
Themenstarter

Ehrenmitglied

Ehrenmitglied



Beiträge: 2.028
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2024a
     Beitrag Verfasst am: 12.07.2011, 16:09     Titel:
  Antworten mit Zitat      
Hallo Fire,

ich habe es eben nochmal getestet. Bei mir (R2010b) läuft es ohne Fehlermeldung oder Warnung durch.

Poste doch bitte mal die Fehlermeldung, wenn sie weiterhin auftaucht.

Viele Grüße
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
 
Jong

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.03.2012, 09:16     Titel:
  Antworten mit Zitat      
Hallo Steve,

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?

Beste Grüße,
Jong

P.s. : hier ist mein Beispiel-Code:

Code:
%

function welcomewin_out = welcomewin(guiprops)


hpixel = guiprops.screensize(1,3);
vpixel = guiprops.screensize(1,4);

window = figure('Visible','off','Position',[round(hpixel/4),round(vpixel/4),round(hpixel/2),round(vpixel/2)],'Name','Property Selection');
handles = guihandles(window);
handles.window = window;
guidata(window, handles);
handles.output = hObject;

% Create welcome text
welcometext = 'Programm Name';
txt_sel = uicontrol(window,'Style','text','String',welcometext,'Position',[0 round(vpixel/4) round(hpixel/2) round(vpixel/4)]);

psb_exi = uicontrol(window, 'Style', 'PushButton', 'String', 'Exit','Position', [round(hpixel/2 - 200) 100 100 70]);
set(window,'CloseRequestFcn',{@psb_exi_callback, guidata(window)})
set(psb_exi,'Callback', {@psb_exi_callback, guidata(window)})
handles.psb_exi = psb_exi;
guidata(psb_exi,handles);
%data = guidata(window);
%get(handles.window);


% 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');
        if strcmp(button,'No')
            return;
        end
   
        if ishandle(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

    end


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