我正在MATLAB的GUI中工作,並使用選項卡來組織信息。由於這些選項卡在MATLAB GUIDE中不受支持,我只是創建了幾個uipanel
s並更改它們的'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
,1個checkbox
和三個edit
s。它看起來並不擁擠。此外,我用最少的代碼和開銷自行完成了佈局和回調。但是,它仍然有非常惱人的標籤轉換。
我在想所有的面板都可以看到,但是他們的位置放在主圖的外面。因此,當選中標籤時,舊標籤將被移開,並且新標籤被帶入。通過這種方式,可能所有面板都被緩存在GPU內存中,並且轉換速度更快...... – tashuhka
我認爲渲染的默認值足夠快,即'DoubleBuffer','on','Renderer','畫家','RendererMode','auto'。任何其他組合可能會更快? – tashuhka
我試圖使用「位置」而不是「可見」作爲切換標籤頁的參數,但我無法理解任何改進。我也嘗試了不同的渲染組合,結果相同。 – tashuhka