MATLAB의 GUI에서 작업 중이며 탭을 사용하여 정보를 구성합니다. 탭이 MATLAB GUIDE에서 지원되지 않으므로 여러 개의 uipanel
을 작성하고 'Visible'
필드를 변경하십시오. 그러나 각 패널 내의 컨트롤 수가 많으면 패널을 전환하는 데 약간의 시간이 걸립니다. 탭 전환을 더 빠르게하는 방법을 아는 사람이 있습니까? MATLAB GUI의 최적화 된 탭
tab_example_gui.m
% Figure
handles.figure_window = figure(...
'Units','characters',...
'Tag','figure_window',...
'Position',[50 50 80 25],...
'Name','Tab Example',...
'DockControls','off',...
'IntegerHandle','off',...
'MenuBar','none',...
'NumberTitle','off',...
'Resize','off');
% Buttons
handles.tab_panel = uibuttongroup(...
'Parent',handles.figure_window,...
'Tag','tab_panel',...
'Units','characters',...
'Position',[0 23 80 2],...
'SelectionChangeFcn',@(hObject,eventdata)tab_example_callback(hObject,eventdata,guidata(hObject)),...
'BorderType','none');
handles.tab_a = uicontrol(...
'Parent',handles.tab_panel,...
'Tag','tab_a',...
'Units','characters',...
'Position',[0 0 40 2],...
'Style','togglebutton',...
'String','Tab A');
handles.tab_b = uicontrol(...
'Parent',handles.tab_panel,...
'Tag','tab_b',...
'Units','characters',...
'Position',[40 0 40 2],...
'Style','togglebutton',...
'String','Tab B');
% Panel A
handles.panel_a = uipanel(...
'Parent',handles.figure_window,...
'Tag','panel_menu',...
'Units','characters',...
'Position',[0.1 0 79.8 23],...
'Visible','On');
handles.panel_a_text = uicontrol(...
'Parent',handles.panel_a,...
'Tag','panel_menu_load_id_text',...
'Units','characters',...
'Position',[0 0 77 22],...
'Style','text',...
'String','This is the tab A');
% Panel B
handles.panel_b = uipanel(...
'Parent',handles.figure_window,...
'Tag','panel_menu',...
'Units','characters',...
'Position',[0.1 0 79.8 23],...
'Visible','Off');
handles.panel_b_text = uicontrol(...
'Parent',handles.panel_b,...
'Tag','panel_menu_load_id_text',...
'Units','characters',...
'Position',[0 0 77 22],...
'Style','text',...
'String','This is the tab B');
guidata(handles.figure_window, handles);
tab_example_callback.m
function tab_example_callback(hObject,eventdata,handles)
switch get(get(hObject,'SelectedObject'),'Tag')
case 'tab_a', set(handles.panel_a,'Visible','On'); set(handles.panel_b,'Visible','Off');
case 'tab_b', set(handles.panel_a,'Visible','Off'); set(handles.panel_b,'Visible','On');
end
guidata(handles.figure_window, handles);
end
참고 : GUI 5 개 탭에서 시뮬레이션을위한 매개 변수를 소개하는 것입니다. 각 탭에는 약 15 개의 행이 있습니다. 각 행은 하나의 text
, 하나의 checkbox
및 세 개의 edit
을 갖는다. 나를 위해 혼잡하지 않습니다. 게다가 최소한의 코드와 오버 헤드로 독자적으로 레이아웃과 콜백을 만들었습니다. 그러나 여전히 매우 성가신 탭 전환이 있습니다.
나는 모든 패널이 표시 될 수 있다는 생각하지만, 자신의 위치는 주역의 외부에 배치된다. 따라서 탭을 선택하면 이전 탭이 사라지고 새 탭이 표시됩니다. 이 방법으로, 모든 패널이 GPU 메모리에 캐시되고 전환이 더 빨라질 수 있습니다 ... – tashuhka
렌더링의 기본값은 'DoubleBuffer', 'on', 'Renderer', 'painters', 'RendererMode', 'auto'등 빠르다고 생각합니다. 다른 조합은 더 빠를 수 있습니까? – tashuhka
탭 사이를 전환하는 매개 변수로 '표시'대신 '위치'를 사용하려고했지만 개선에 대해 감사 할 수 없습니다. 나는 또한 같은 결과로 다른 렌더링 조합을 시도했다. – tashuhka