2017-12-13 11 views
1

Ich erstelle eine grafische Schnittstelle (manuell) und ich hätte gerne eine Reset-Taste, die die Standardwerte zurückgesetzt. wiederwie die Standardwerte in einer grafischen Benutzeroberfläche zurückgesetzt werden

ich diesen bereits Code

H.but(3) = uicontrol('Units','normalized', ... 

    'BackgroundColor',[1 0.7 1], ... 
    'Callback','MyFunction(''Reset'');', ... 
    'FontSize',12, ... 
    'Position',[0.04 0.54 0.1 0.05 ], ... 
    'String','Reset'); 

case 'Reset' 
clear all % Is not working and I think that isn't that I expect 
set(findobj(H.fig,'style','edit', '-or','style','text'),'string','') % H is a global variable. This trial don't give the default value, it just clear certain boxes 
+0

Was erwarten Sie von der 'case' Anweisung? "case" sollte nur innerhalb eines 'switch'-Blocks existieren, und selbst dann möchten Sie den Callback-Code in Ihrer definierten' MyFunction' Callback-Funktion haben. – Wolfie

+0

ja ich erstelle meine Funktion, definiere eine Schaltfläche und einige Plot mit Schalter und am Ende möchte ich die Schnittstelle zurücksetzen –

+2

Es ist unmöglich, Ihr Problem mit dem Code zu diagnostizieren, den Sie bereitgestellt haben. Wenn das alles Ihr Code ist, dann ist es mehr falsch als richtig. Wenn dies eine Teilmenge Ihres Codes ist, buchen Sie den Rest des relevanten Codes. Stellen Sie die Frage klarer oder erwarten Sie, dass sie unbeantwortet bleibt/geschlossen wird. – Wolfie

Antwort

0

Wenn Sie wirklich von Grund auf über beginnen Ihre GUI wollen würde der einfachste Weg, es einfach es schließen öffnen. Sie können dies über den Rückruf Ihrer Schaltfläche tun. Was ich auf eine neue Funktion hingewiesen habe restartGUI. Das könnte eine Unterfunktion Ihrer Haupt-GUI oder einer eigenen M-Datei sein, Ihrer Wahl.

Ihre Frage ist ziemlich hell auf Details, so kann ich nicht mit einigen der Besonderheiten helfen, aber das sollte Ihnen die allgemeine Idee geben.

Wenn das Schließen und Öffnen nicht das ist, was Sie dann in der restartGUI Funktion möchten, müssen Sie nur den Status jedes Ihrer uicontrols usw. manuell zurücksetzen (was auch immer in Ihrer GUI ist, das wir nicht sehen können) .

H.but(3) = uicontrol('Units','normalized', ... 
    'BackgroundColor',[1 0.7 1], ... 
    'Callback',@restartGUI, ... 
    'FontSize',12, ... 
    'Position',[0.04 0.54 0.1 0.05 ], ... 
    'String','Reset'); 

% <<<< THE rest of your code >>> 

function restartGUI(hObject,varargin) 
global H 
close(H.fig) %Assuming H.fig the main GUI window. 
%Call the GUI again which will restart it. 
yourGUIFunction 

Edit: hinzugefügt die Verwendung der globalen H zu schließen.

0

Normalerweise bevorzuge ich die Erstellung einer spezifischen reset_gui-Funktion für meine GUIs, die alle relevanten Steuerelementeigenschaften (wie Kontrollkästchenstatus, Zeichenfolgen in bearbeitbaren Textfeldern usw.) auf die entsprechenden Standardwerte zurücksetzt sowie alle relevanten Variablenwerte setzt auf die Standardwerte, Clearing-Plots, etc ..

Wenn Sie eine generische Option zum Zurücksetzen aller UI-Steuerungseigenschaften in ihren Ausgangszustand bevorzugen würden, hier ist ein Beispiel für eine mögliche Lösung:

function example_reset_gui 

    % Initialize GUI: 
    hFigure = figure(); 
    uicontrol('Style', 'edit', 'Position', [20 100 100 25]); 
    uicontrol('Style', 'edit', 'Position', [20 65 100 25]); 
    uicontrol('Style', 'push', 'Position', [20 20 60 30], ... 
      'String', 'Reset', 'Callback', @reset_fcn); 
    drawnow 

    % Collect default states: 
    [defaultState{1:3}] = get_default_state(hFigure); 

    % Nested reset function: 
    function reset_fcn(~, ~) 
    set(defaultState{:}); 
    end 

end 

% Local function: 
function [hArray, propArray, valueArray] = get_default_state(hFigure) 
    hArray = findall(hFigure, 'Type', 'uicontrol'); 
    propArray = fieldnames(set(hArray(1))); 
    valueArray = get(hArray, propArray); 
end 

Dies schafft eine Figur mit 2 editierbaren Textfeldern und einem Reset-Knopf. Sie können eingeben, was Sie wollen, in die Textfelder, und wenn Sie die Reset-Taste drücken, wird es sie löschen (d. H., Sie auf die leere Standardzeichenfolge setzen, die sie zuerst enthalten).

Die local functionget_default_state werden alle uicontrol Objekte in der Figur finden, dann alle ihre set -able Eigenschaften erhalten (das heißt alle Eigenschaften, die nicht schreibgeschützt sind), dann get alle Anfangswerte für diese Eigenschaften. Die drei Ausgänge sind in dem 1-mal-3-Zellen-Array defaultState gespeichert, auf das über die nested functionreset_fcn zugegriffen werden kann. Wenn die Reset-Taste gedrückt wird, werden alle set -fähigen UI-Steuerelementeigenschaften auf die Werte gesetzt, die sie bei der ersten Erstellung hatten.

Es sollte beachtet werden, dass alle Änderungen an der Position property (z. B. aufgrund der Größenanpassung der Abbildung) durch diesen Ansatz rückgängig gemacht werden können. Mit 'normalized' units würde dies vermeiden.

Verwandte Themen