Membuat GUI di Octave

By | July 28, 2024
Print Friendly, PDF & Email
2,471 Views

— Membuat GUI di Octave –  Aplikasi berbasis GUI yang dihadirkan kepada end user akan memudahkan pengoperasian serta melihat hasil secara interaktif. Tapi tahu nggak sih apa itu singkatan GUI? GUI singkatan dari graphical user interface bila dibahasa indonesiakan yaitu antar muka berbasis grafik. Perkembangan aplikasi sebelum diciptakan GUI yaitu CLI singkatan dari comand line interface bila dibahasa Indonesiakan yaitu antar muka berbasis teks. Itu lho kalau kalian menggunakan command promt di windows atau linux dengan terminal nya.

Aplikasi berbasis CLI di Octave

Bila kalian membaca buku yang saya tulis dengan judul Buku Belajar Mudah Pemrograman GNU Octave-penerbit Graha Ilmu banyak kode yang dibuat untuk mempelajari algoritma tapi kebanyakan semuanya berbasis teks. Contohnya kode berikut untuk membuat aplikasi menilai grade dengan melibatkan penggunaan looping agar kode dimuat ulang lagi. Misalkan kita simpan script dibawah ini dengan nama grade.m

clc;clear all;close all;
disp('Silahkan pilih menu berikut')
disp('ketik 1 untuk menghitung grade')
disp('ketik 0 untuk keluar')

while(true) 
  ketik=input('pilihan mu? ');
  if(ketik==1)
      nilai=input('berapa nilai hasil ujian mu? 0-100 ');
      if(nilai<=60)
        disp('kamu tidak lolos');
      elseif (nilai >60)
        disp('kamu lolos');
      else
        disp('tolong masukan angka 0 sampai 100');
      endif
      
  else
    break;
  endif
endwhile

Langkah selanjutnya seperti panggil function, aplikasi diatas berjalan dengan baik di octave.

Aplikasi berbasis GUI di Octave

Bagi pengguna Matlab tentu untuk urusan pembuatan GUI sangat mudah sekali, sebenarnya untuk Membuat GUI di Octave sangat bisa koq. tapi ketik manual gitu…tidak seperti Matlab yang menggunakan java sebagai backbone nya, maka Octave menggunakan QT, yuk kita coba seperti berikut.

## 20.03.2017 Andreas Weber <andy@josoansi.de>
## Demo which has the aim to show all available GUI elements.
## Useful since Octave 4.0

close all
#clear h

graphics_toolkit qt

h.ax = axes ("position", [0.05 0.42 0.5 0.5]);
h.fcn = @(x) polyval([-0.1 0.5 3 0], x);

function update_plot (obj, init = false)

  ## gcbo holds the handle of the control
  h = guidata (obj);
  replot = false;
  recalc = false;
  switch (gcbo)
    case {h.print_pushbutton}
      fn =  uiputfile ("*.png");
      print (fn);
    case {h.grid_checkbox}
      v = get (gcbo, "value");
      grid (merge (v, "on", "off"));
    case {h.minor_grid_toggle}
      v = get (gcbo, "value");
      grid ("minor", merge (v, "on", "off"));
    case {h.plot_title_edit}
      v = get (gcbo, "string");
      set (get (h.ax, "title"), "string", v);
    case {h.linecolor_radio_blue}
      set (h.linecolor_radio_red, "value", 0);
      replot = true;
    case {h.linecolor_radio_red}
      set (h.linecolor_radio_blue, "value", 0);
      replot = true;
    case {h.linestyle_popup, h.markerstyle_list}
      replot = true;
    case {h.noise_slider}
      recalc = true;
  endswitch

  if (recalc || init)
    x = linspace (-4, 9);
    noise = get (h.noise_slider, "value");
    set (h.noise_label, "string", sprintf ("Noise: %.1f%%", noise * 100));
    y = h.fcn (x) + 5 * noise * randn (size (x));
    if (init)
      h.plot = plot (x, y, "b");
      guidata (obj, h);
    else
      set (h.plot, "ydata", y);
    endif
  endif

  if (replot)
    cb_red = get (h.linecolor_radio_red, "value");
    lstyle = get (h.linestyle_popup, "string"){get (h.linestyle_popup, "value")};
    lstyle = strtrim (lstyle(1:2));

    mstyle = get (h.markerstyle_list, "string"){get (h.markerstyle_list, "value")};
    if (strfind (mstyle, "none"))
      mstyle = "none";
    else
      mstyle = mstyle(2);
    endif
  
    set (h.plot, "color", merge (cb_red, [1 0 0 ], [0 0 1]),
                 "linestyle", lstyle,
                 "marker", mstyle);
  endif
  
endfunction


## plot title
h.plot_title_label = uicontrol ("style", "text",
                                "units", "normalized",
                                "string", "plot title: (text)",
                                "horizontalalignment", "left",
                                "position", [0.6 0.85 0.35 0.08]);

h.plot_title_edit = uicontrol ("style", "edit",
                               "units", "normalized",
                               "string", "Please fill me! (edit)",
                               "callback", @update_plot,
                               "position", [0.6 0.80 0.35 0.06]);

## grid
h.grid_checkbox = uicontrol ("style", "checkbox",
                             "units", "normalized",
                             "string", "show grid\n(checkbox)",
                             "value", 0,
                             "callback", @update_plot,
                             "position", [0.6 0.65 0.35 0.09]);

h.minor_grid_toggle = uicontrol ("style", "togglebutton",
                                 "units", "normalized",
                                 "string", "minor\n(togglebutton)",
                                 "callback", @update_plot,
                                 "value", 0,
                                 "position", [0.77 0.65 0.18 0.09]);

## print figure
h.print_pushbutton = uicontrol ("style", "pushbutton",
                                "units", "normalized",
                                "string", "print plot\n(pushbutton)",
                                "callback", @update_plot,
                                "position", [0.6 0.45 0.35 0.09]);
## noise
h.noise_label = uicontrol ("style", "text",
                           "units", "normalized",
                           "string", "Noise:",
                           "horizontalalignment", "left",
                           "position", [0.05 0.3 0.35 0.08]);

h.noise_slider = uicontrol ("style", "slider",
                            "units", "normalized",
                            "string", "slider",
                            "callback", @update_plot,
                            "value", 0.4,
                            "position", [0.05 0.25 0.35 0.06]);

## linecolor
h.linecolor_label = uicontrol ("style", "text",
                               "units", "normalized",
                               "string", "Linecolor:",
                               "horizontalalignment", "left",
                               "position", [0.05 0.12 0.35 0.08]);

h.linecolor_radio_blue = uicontrol ("style", "radiobutton",
                                    "units", "normalized",
                                    "string", "blue",
                                    "callback", @update_plot,
                                    "position", [0.05 0.08 0.15 0.04]);

h.linecolor_radio_red = uicontrol ("style", "radiobutton",
                                   "units", "normalized",
                                   "string", "red",
                                   "callback", @update_plot,
                                   "value", 0,
                                   "position", [0.05 0.02 0.15 0.04]);

## linestyle
h.linestyle_label = uicontrol ("style", "text",
                               "units", "normalized",
                               "string", "Linestyle:",
                               "horizontalalignment", "left",
                               "position", [0.25 0.12 0.35 0.08]);

h.linestyle_popup = uicontrol ("style", "popupmenu",
                               "units", "normalized",
                               "string", {"-  solid lines",
                                          "-- dashed lines",
                                          ":  dotted lines",
                                          "-. dash-dotted lines"},
                               "callback", @update_plot,
                               "position", [0.25 0.05 0.3 0.06]);

## markerstyle
h.markerstyle_label = uicontrol ("style", "text",
                                 "units", "normalized",
                                 "string", "Marker style:",
                                 "horizontalalignment", "left",
                                 "position", [0.58 0.3 0.35 0.08]);

h.markerstyle_list = uicontrol ("style", "listbox",
                                "units", "normalized",
                                "string", {"none",
                                           "'+' crosshair",
                                           "'o'  circle",
                                           "'*'  star",
                                           "'.'  point",
                                           "'x'  cross",
                                           "'s'  square",
                                           "'d'  diamond",
                                           "'^'  upward-facing triangle",
                                           "'v'  downward-facing triangle",
                                           "'>'  right-facing triangle",
                                           "'<'  left-facing triangle",
                                           "'p'  pentagram",
                                           "'h'  hexagram"},
                                "callback", @update_plot,
                                "position", [0.58 0.04 0.38 0.26]);

set (gcf, "color", get(0, "defaultuicontrolbackgroundcolor"))
guidata (gcf, h)
update_plot (gcf, true);

 

See also  Logika Boolean Exclusive OR - XOR

Lumayan lengkap ya tapi pusing juga kalau nulis kode segitu banyaknya (bagi yang tidak terbiasa sih) tapi tenang saja bagi para pecinta opensource tidak perlu berkecil hati, ada koq aplikasi GUIEditor untuk octave.

Bisa kalian peroleh source code nya untuk dicompile https://gitlab.com/labinformatica/guieditor atau dalam versi binary windows https://gitlab.com/labinformatica/guieditor/-/blob/master/binaries/windows/guiEditor-1.0.0.zip

Tapi aplikasi bawaanya dari bahasa spanyol, untuk mengubahnya cukup ubah seperti berikut

 

Pilih English ya jangan sampai kelewat serta tutup aplikasinya dan run lagi

Tapi masih banyak error sih. Tapi intinya Octave belum ada aplikasi GUI Builder saja

ref:

https://onlinelibrary.wiley.com/doi/10.1002/eng2.12269

https://wiki.octave.org/Uicontrols