MATLAB Answers

Keep GUI functions running when opening an uigetfile Dialog?

4 ビュー (過去 30 日間)
I have made a GUI "Recording" which displays real time data from Simulink on several axes.
Within this GUI "Recording" I placed a pushbutton which opens another GUI "TrendFunction" where I can display a trend function. (E.g. the data over the last 2, 5 or 10 minutes)
Now, the problem is that within the "TrendFunction" I use uigetfile() to load data. But this causes my Simulink model and thereby the recording to stop. (Both the Simulink model and all axes in "Recording" do not continue/update) It seems that all functions are set on hold until the uigetfile() dialog is closed.
So the Question is:
Is there a way to avoid holding/pausing a Simulink model when opening an uigetfile dialog in a GUI?

採用された回答

Alfonso Nieto-Castanon
Alfonso Nieto-Castanon 2015 年 5 月 20 日
編集済み: Alfonso Nieto-Castanon 2015 年 5 月 20 日
No, as far as I know uigetfile will create a modal window (see windowstyle) which will lock matlab interface until a selection is made (and the selected filename can be returned to your originating function/script). In order to avoid this you need a non-modal file selection routine. For example, you may want to create your own display showing the available data files, and create a callback function that will implement the desired trend display once the user has selected a file. For example something based on the following:
function TrendFunction(varargin)
files = dir('*.mat');
h_fig = figure;
h_dlg = uicontrol('style','listbox','units','norm','position',[.1 .1 .8 .8],'string',{files.name},'callback',@TrendFunction_selected);
% that is all, now return control to Matlab until a selection is made
end
function TrendFunction_selected(varargin)
% when a file selection is made:
files = get(gcbo,'string');
selected = get(gcbo,'value');
file = files{selected};
data = load(file);
% here the plotting functions
clf(gcbf);
h_ax = axes('parent',gcbf);
plot(h_ax, data.x, data.y);
end
You can make that prettier but that should give you an idea of the code flow...
  1 件のコメント
Manuel Thomet
Manuel Thomet 2015 年 5 月 20 日
Yes this works. Did somehow not think of creating it on my own.
Thank you very much.

サインインしてコメントする。

その他の回答 (1 件)

Thomas Koelen
Thomas Koelen 2015 年 5 月 20 日
編集済み: Thomas Koelen 2015 年 5 月 20 日
Try calling a function that calls the uigetfile function, maybe this works but I'm not sure.
  1 件のコメント
Manuel Thomet
Manuel Thomet 2015 年 5 月 20 日
I like the idea.
Tried it, but did not succeed.
(pushbutton callback calls a function "outside" the GUI to get the file)
It seems as if it does not matter where the uigetfile is called, it still blocks my Model. I assume explicitly running it in parallel could work for me. (Multithreading?) Can I do that?

サインインしてコメントする。

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by