を作成する GUI クラスがあるとしますuifigure
(以下を参照)。ワークスペースでこのクラスのインスタンスを作成できます。
tG = testGUI('hi!');
メソッドを呼び出して GUI を閉じることができますdelete
: tG.delete()
. tG
たとえば、ハンドルがワークスペースからクリアされたときに GUI を自動的に閉じることも可能ですか?
clear tG
これにより、GUI へのハンドルが既に削除されている間、いくつかのスクリプトを複数回実行するときに、クラスの多くのインスタンスを開くことができなくなります。
アップデート
- コンストラクターで呼び出しを削除する
registerApp(app, app.UIFigure)
と、最初に問題が解決したように見えましたが、実際の GUI では機能しませんでした。 - テスト 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