簡體   English   中英

如何手動將Matlab GUIDE GUI代碼轉換為Octave UI組件

[英]How to manually convert Matlab GUIDE GUI code to Octave UI Components

我應該如何轉換(手動)由Matlab GUIDE GUI創建的代碼,以使用Octave的UI組件?

像這樣的東西:

gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...
               'gui_Singleton',  gui_Singleton, ...
               'gui_OpeningFcn', @Mat_to_Octave_OpeningFcn, ...
               'gui_OutputFcn',  @Mat_to_Octave_OutputFcn, ...
               'gui_LayoutFcn',  [] , ...
               'gui_Callback',   []);
if nargin && ischar(varargin{1})
    gui_State.gui_Callback = str2func(varargin{1});
end

等等

  1. 我在哪里可以找到需要替換的綜合元素列表?

  2. 如何為Octave UI元素創建等效的GUIDE回調函數,是否可以為所有元素創建單個回調函數? 也許這兩者之間存在差異。

  3. GUID GUI代碼是打開還是開源? 肯定是這樣的

  4. 是否可以訪問GUIDE中用戶設置的UI布局? 即我們知道按鈕的寬度和文本顏色設置保存在哪里嗎?

  5. 某處有完整的清單嗎? 如果是的話,在哪里? UI組件中是否提供了GUIDE中的所有元素或至少大部分元素? 我怎么檢查這個?

  6. 在開始任務之前有什么遺漏的嗎?

在大多數情況下,八度音階上的GUI創建與matlab相同。 GUI創建是八度音階的一個相對較新的補充,所以期望matlab系列中的幾個最近的添加尚未使它成為八度音階,但是在大多數情況下,實現GUI應用程序的matlab代碼應該在八度音程上工作沒有或很少需要調整。 以下是matlaboctave的相應手冊條目; 你會注意到核心功能是相同的。

一個重要的“捕獲”是octave暫時不支持嵌套函數的句柄(這可能會在以后發生變化)。 例如,考慮以下matlab代碼實現一個帶有影響繪圖的滑塊的簡單GUI(取自此答案 )。

%%%%%% In file myplot.m %%%%%
function myplot

  %% Create initial figure and spiral plot
  figure;  axes ('position', [0.1, 0.3, 0.8, 0.6]);
  t = linspace (0, 8*pi, 100);  x = t .* cos(t);  y = t .* sin(t);
  plot (x, y);  axis ([-100, 100, -100, 100]);

  %% Add ui 'slider' element      
  hslider = uicontrol (                    ...
         'style', 'slider',                ...
         'Units', 'normalized',            ...
         'position', [0.1, 0.1, 0.8, 0.1], ...
         'min', 1,                         ...
         'max', 50,                        ...
         'value', 10,                      ...
         'callback', {@plotstuff}          ...
       );

  %% Callback function called by slider event
  function plotstuff (h, event)
    n = get (h, 'value');
    x = n * t .* cos(t);  y = n * t .* sin(t);
    plot (x, y);  axis ([-100, 100, -100, 100]);
  end
end

如果您嘗試在八度音程上運行此命令,您將收到以下錯誤消息:

>> myplot
錯誤:尚不支持嵌套函數的句柄
錯誤:從第10行第11列的myplot調用

將嵌套函數轉換為獨立函數或子函數可解決此問題(如本答案中所示 )。

至於GUIDE,雖然octave還沒有類似的“用戶友好”圖形工具用於GUI-app創建,但最終,所有GUIDE都會為UI元素創建生成適當的底層代碼,理論上應該兼容八度音程。 話雖如此,值得准確讀取GUIDE創建的文件,即加載圖元素的'.fig'文件,以及保存回調和實際代碼的'函數'文件等。因此,“運行”GUIDE生成的文件在八度音階中可能會首先涉及“加載”這個數字。 此外,在實踐中,GUIDE可能會使用嵌套函數進行回調,因此代碼可能需要進行一些調整才能將這些函數轉換為合適的子函數以使其在八度音程上工作。

話雖如此,GUIDE確實更適合那些喜歡避免“實際”代碼的人,但事實上,一旦你熟悉了get / set命令如何用於操作,直接用matlab / octave編寫GUI可能會更加直截了當ui-elements屬性。 如果您正在使用適用於octave和matlab的GUI解決方案,我肯定會建議沿着這條路線前進,並堅持使用子功能而不是嵌套功能。

回答上述未涵蓋的其余兩個問題:

  • 不,GUIDE不是開源的(更不用說免費軟件了)。 它是Mathworks的專有代碼,使用其許可證。 特別是,從理論上講,使用帶有八度音程的GUIDE生成的代碼可能存在許可問題,但我不確定。

  • GUIDE直接生成.fig文件。 這是一個二進制文件,可以加載到matlab(理論上是八度)。 使用GUIDE,沒有其他“源”文件詳細說明用於創建此圖的元素及其屬性。 話雖如此,在matlab中,一旦加載了圖形,您可以從圖形的圖形菜單中導出“源代碼”,如果需要,可以重新創建該圖形。 但是,這可能不是最適合人性化的代碼。 這是優於程序化方法優於GUIDE的原因之一:您擁有干凈,清晰的源代碼,它以編程方式詳細說明了元素的屬性,而不是通過加載圖形並搜索其屬性來將它們刪除。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM