Hay una barra de progreso uicontrol que puede ser añadido a Matlab gui,
ya sea uicontrol o componente ActiveX?

[editar] yo sé acerca de la waitbar función, me refería a un componente que puede ser implementado en el diseño de la interfaz gráfica de usuario y no sólo salir de la ventana. Algo así como el estado de la batería en la barra de estado.

  • No es ActiveX sólo para Internet Exploder?
  • a la Licuadora: puede utilizar ActiveX en Matlab GUI del Entorno de Diseño (GUÍA) en adición a la uicontrols que se pueden agregar.
  • Ahh, está bien. Ser un Linux persona, sólo sabía que la ActiveX a veces se utiliza para explotar IE.
InformationsquelleAutor shahar_m | 2011-03-20

7 Comentarios

  1. 28

    Waitbar y sus variantes mostrar una ventana emergente con una barra de estado. En la mayoría de las aplicaciones que esto está bien y muy sencillo de utilizar.

    Si quieres integrar una barra de progreso dentro de una ventana de la GUI, tiene varias opciones:

    1. implementar el interior waitbar código – esto es realmente sólo un de los ejes que presenta una mancha de color cuyo ancho depende del valor de progreso.
    2. utilizar el estándar java.el swing.JProgressBar, que puede ser añadido a su Matlab GUI a través de la incorporada en javacomponent función
    3. utilizar el Utilidad de la barra de estado o la explicación aquí para agregar una barra de progreso para tu interfaz gráfica de usuario de la ventana de la barra de estado,

    Todas estas opciones de trabajo en todos los Matlab plataformas.

    • Gracias! que era exactamente lo que necesitaba.
  2. 6

    Sí, los hay. El waitbar función es lo que usted necesita. Los ejemplos no son fáciles de seguir y usted puede comenzar de inmediato. Debería funcionar bien en las 3 plataformas (Windows/OS X/Linux).

  3. 4

    La adaptación de mi código de este MatLab Newgroup comentario, yo era capaz de reunir los siguientes:

    function h = uiProgressBar(varargin)
    %uiProgressBar: A waitbar that can be embedded in a GUI figure.
    
        if ishandle(varargin{1}) && size(varargin, 2) > 1
            ax = varargin{1};
            value = varargin{2};
            p = get(ax,'Child');
            x = get(p,'XData');
            x(3:4) = value;
            set(p,'XData',x)
            return
        end
    
        bg_color = 'w';
        fg_color = 'r';
        h = axes('Units','pixels',...
            'XLim',[0 1],'YLim',[0 1],...
            'XTick',[],'YTick',[],...
            'Color',bg_color,...
            'XColor',bg_color,'YColor',bg_color, ...
            'Parent', varargin{1});
        patch([0 0 0 0],[0 1 1 0],fg_color,...
            'Parent',h,...
            'EdgeColor','none',...
            'EraseMode','none');
    end

    La creación es como sigue, donde parent es el padre del panel que desea agregar a:

    myProgressBar = uiProgressBar(parent);

    y actualización de la barra de progreso es tan simple como esto:

    uiProgressBar(myProgressBar, .2);

    Aquí un ejemplo de trabajo mediante un figure:

    f = figure('Name', 'Progress Bar Example', 'Position', [100 100 800 600]);
    
    progressBar = uiProgressBar(f);
    
    for i = 1:10:100
        uiProgressBar(progressBar, i/100);
        pause(.5);
    end

    Cómo agregar la barra de progreso de control de Matlab gui?

    • Esta es mi solución favorita que he visto hasta ahora. Gracias! Tomé la idea y la cambió sustancialmente para satisfacer mis necesidades, pero lo más importante es que he hecho mi versión de una clase.
    • Esta es la mejor respuesta hasta ahora sin dolor de cabeza.
  4. 3

    otra solución más simple es usar dos anidada uipanels como este:

    function MyProgressBar(handle, progress)
       % progress = 0.00001 .... 1
    
       % 1st panel
       p = uipanel(handle);
    
       % 2n panel as bar
       bar = uipanel(p);
        set(bar, 'BackgroundColor', 'red');
        x = get(bar, 'Position');
        x(3) = progress;       % Corresponds to % progress if unit = normalized
        set(bar, 'Position',x);
    end

    Uso:

     f = figure();
     set(f,'Position',[100,100,400,40]);
     MyProgressBar(f, 0.5); % corresponds to 50% progress
  5. 2

    Para cualquier persona que todavía está interesado, aquí está mi solución utilizando una clase:

    classdef progressbar < handle
    properties(Access = protected)
    h_panel         % Panel on which everything sits
    h_ax            % The progress range axes
    h_pbar          % The bar representing progress (patch)
    h_ptext         % Percentage label
    end
    properties(Access = public, Dependent = true)
    range           % Progress range
    pvalue          % Current value
    percent         % Percentage complete (relative within range)
    position        % Position of the object (panel)
    ax_tag          % Tag of the axes
    visible         % Is the object (panel) visible?
    end
    properties(Constant = true)
    default_color = [.75 .75 .9];
    end
    methods
    % Initializer
    function obj = progressbar(fig, pos, range)
    if nargin < 3
    range = [0 1];
    end
    obj.h_panel = uipanel('Parent', fig, 'Units', 'Inches', ...
                    'Position', pos, 'Tag', 'progbar_panel');
    obj.h_ax = axes('Parent', obj.h_panel, ...
                    'Units', 'Inches', 'Position', [0 0 obj.position(3) obj.position(4)], ...
                    'XTickLabel', '', 'XTick', [], 'YTickLabel', '', 'YTick', []);
    obj.h_pbar = patch([range(1) range(1) range(1) range(1)], [0 0 2 2], ...
                    obj.default_color, 'Parent', obj.h_ax, 'Tag', 'progbar_patch');
    obj.h_ptext = text(obj.position(3)/2, obj.position(4)/2, '0%', ...
                    'Parent', obj.h_ax, 'FontWeight', 'bold', 'Units', 'Inches', ...
                    'HorizontalAlignment', 'center', 'Tag', 'progbar_text');
    obj.range = range;
    obj.ax_tag = 'progbar_ax';
    end
    % Property Access Methods
    function set.range(obj, value)
    % Instead of replotting, just reset the XLim to the
    % extremities of the input range. If the values are not
    % increasing, just default to [0 1].
    if value(end) > value(1)
    set(obj.h_ax, 'XLim', value([1,end]), 'YLim', [0 2]);
    else
    set(obj.h_ax, 'XLim', [0 1], 'YLim', [0 2]);
    end
    % Reset progress.
    obj.pvalue = value(1);
    end
    function value = get.range(obj)
    value = get(obj.h_ax, 'XLim');
    end
    function set.pvalue(obj, value)
    % Expects a single value to represent progress value and
    % constructs the selection rectangle from that. If multiple
    % values are passed in, all are ignored but the last, since the
    % left edge of the bar is always the first element of the
    % range.
    set(obj.h_pbar, 'XData', [obj.range(1) value(end) value(end) obj.range(1)], ...
                    'FaceColor', obj.default_color);
    set(obj.h_ptext, 'String', sprintf('%3.0f%%', obj.percent * 100));
    end
    function value = get.pvalue(obj)
    % The progress bar is actually 2D, but we treat as if it is 1D.
    % Hence the XData is actually an array of four values but we
    % only consider the second (progress maximum).
    limits = get(obj.h_pbar, 'XData');
    value = limits(2);
    end
    function set.percent(obj, value)
    % Expects a single value between 0 and 1.
    limits = obj.range;
    obj.pvalue = value * (limits(2) - limits(1)) + limits(1);
    end
    function value = get.percent(obj)
    limits = obj.range;
    value = (obj.pvalue - limits(1)) / (limits(2) - limits(1));
    end
    function set.position(obj, value)
    set(obj.h_panel, 'Position', value);
    end
    function value = get.position(obj)
    value = get(obj.h_panel, 'Position');
    end
    function set.ax_tag(obj, value)
    set(obj.h_ax, 'Tag', value);
    end
    function value = get.ax_tag(obj)
    value = get(obj.h_ax, 'Tag');
    end
    function set.visible(obj, value)
    if (isnumeric(value) && value >= 1) || strcmp(value, 'on') == 1 || strcmp(value, 'On') == 1
    set(obj.h_panel, 'Visible', 'on');
    else
    set(obj.h_panel, 'Visible', 'off');
    end
    end
    function value = get.visible(obj)
    vis = get(obj.h_panel, 'Visible');
    value = strcmp(vis, 'on');
    end
    % Public member functions
    function increment(obj)
    % Don't use this if the range is less than 1.
    obj.pvalue = obj.pvalue + 1;
    end
    function display_text(obj, text, color)
    if nargin == 3 && ~isempty(color)
    set(obj.h_pbar, 'FaceColor', color);
    end
    set(obj.h_ptext, 'String', text);
    end
    end
    end

    Declarar una instancia así: pb = progressbar(gcf, [1 1], [0 20]);

    Puede ser utilizado con relativa o de números reales, es decir, pb.pvalue = 10; y pb.percent = .5; hacer lo mismo en mi ejemplo.

    Mi versión de las características de un objeto de texto en el medio de la barra de progreso que muestra el porcentaje actual.

    Mi versión más reciente está disponible aquí.

  6. -1

    Hay otra manera… lo Siento si fue mencionado y me lo perdí. Usted puede construir una figura dynamicly la adición de los ejes de una barra.. funciona muy bien y de fácil adaptable para aplicaciones personalizadas. Pop ups siempre fueron perderse o en el camino.

    • Un ejemplo podría ayudar a esta respuesta

Dejar respuesta

Please enter your comment!
Please enter your name here