图形界面中的拖放功能

7

我能否在GUI中创建一个对象,通过将其'Position'属性设置为鼠标位置来定义它的位置(点击后拖动)?我应该使用哪个函数?

2个回答

4
您可以使用SELECTMOVERESIZE函数来打开GUI对象的移动和调整大小功能。然后,您只需使用鼠标点击并拖动该对象即可。就是这么简单:
set(hObject,'ButtonDownFcn','selectmoveresize');

如果您的GUI对象是uicontrol对象,情况就不那么简单了。这种情况下,您需要通过将'Enable'属性设置为'off''inactive'来禁用该对象,以便执行'ButtonDownFcn'函数而不是'Callback'函数。即使您没有为对象定义回调函数,这也是正确的。
您还可能需要添加一种方法来打开和关闭对象的移动和调整大小功能,例如添加一个额外的按钮或菜单项供您选择。以下是一个简单的示例,它创建了一个具有可编辑文本框和一个按钮的图形,该按钮可以打开和关闭可编辑文本框的移动和调整大小功能。
function GUI_example

  hFigure = figure('Position',[100 100 200 200],...  %# Create a figure
                   'MenuBar','none',...
                   'ToolBar','none');
  hEdit = uicontrol('Style','edit',...               %# Create a multi-line
                    'Parent',hFigure,...             %#   editable text box
                    'Position',[10 30 180 160],...
                    'Max',2,...
                    'String',{'(type here)'});
  hButton = uicontrol('Style','pushbutton',...       %# Create a push button
                      'Parent',hFigure,...
                      'Position',[50 5 100 20],...
                      'String','Turn moving on',...
                      'Callback',@button_callback);

  function button_callback(hSource,eventData)        %# Nested button callback

    if strcmp(get(hSource,'String'),'Turn moving on')
      set(hSource,'String','Turn moving off');          %# Change button text
      set(hEdit,'Enable','inactive',...                 %# Disable the callback
                'ButtonDownFcn','selectmoveresize',...  %# Turn on moving, etc.
                'Selected','on');                       %# Display as selected
    else
      set(hSource,'String','Turn moving on');           %# Change button text
      set(hEdit,'Enable','on',...                       %# Re-enable the callback
                'ButtonDownFcn','',...                  %# Turn off moving, etc.
                'Selected','off');                      %# Display as unselected
    end

  end

end

注意:虽然文档将'Selected'属性列为只读,但我可以轻松地修改它。这可能是文档中的一个错字。


谢谢您的快速回复!您能告诉我这个函数从哪里获取它的输入参数吗? - straits
@Adam:是哪个函数?SELECTMOVERESIZE 不接受任何输入参数。 - gnovice
button_callback函数接收hSource和eventData参数。 - straits
@Adam:当你将对象的回调声明为函数句柄时,默认情况下会自动传递两个参数:发出回调的对象的句柄和它可选提供的事件数据。请查看文档获取更多信息。 - gnovice

2

您可以在GUI中创建一个不可见的坐标轴,并在其中绘制任何对象。然后,您可以使用来自文件交换的DRAGGABLE使对象可以随意拖动。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接