4

を作成する GUI クラスがあるとしますuifigure(以下を参照)。ワークスペースでこのクラスのインスタンスを作成できます。

tG = testGUI('hi!');

メソッドを呼び出して GUI を閉じることができますdelete: tG.delete(). tGたとえば、ハンドルがワークスペースからクリアされたときに GUI を自動的に閉じることも可能ですか?

clear tG

これにより、GUI へのハンドルが既に削除されている間、いくつかのスクリプトを複数回実行するときに、クラスの多くのインスタンスを開くことができなくなります。

アップデート

  • コンストラクターで呼び出しを削除するregisterApp(app, app.UIFigure)と、最初に問題が解決したように見えましたが、実際の G​​UI では機能しませんでした。
  • テスト GUI のボタンにコールバックを追加すると、MVCE で問題が再現されます。

classdef testGUI < matlab.apps.AppBase

    properties (Access = public)
        % The figure handle used.
        UIFigure
        % app name
        name
    end

    properties (Access = private)
        pushButton
    end

    methods (Access = public)

        function app = testGUI(name)
            %TESTGUI - Constructor for the testGUI class.

            % property management
            app.name = name;

            % create GUI components
            createComponents(app)

            % Register the app with App Designer
            %registerApp(app, app.UIFigure); % removing this does not solve the issue
        end

        function delete(app)
            delete(app.UIFigure)
        end
    end

    methods (Access = private)

        function createComponents(app)
            %Create the components of the GUI

            app.UIFigure = uifigure('Name', app.name);
            app.UIFigure.Visible = 'on';

            % some button
            app.pushButton = uibutton(app.UIFigure, 'push');
            app.pushButton.Text = 'This is a button';
            app.pushButton.ButtonPushedFcn = @(src,event) someCallBack(app);
        end

        function someCallBack(app)
            fprintf('this is someCallBack\n')
        end
    end
end
4

0 に答える 0