OCaml + LablGTK2: многострочное текстовое поле

Я пытаюсь понять, как создать многострочное текстовое поле внутри графического виджета. LablGTK2, по-видимому, довольно ограничен в плане документации, а API мало для того, что начинает выглядеть так, как я хочу.

Я начал перекрестную ссылку на оригинальную документацию GTK2, https://developer.gnome.org/gtk3/stable/gtkobjects.html, на документацию Lablgtk2, http://wwwfun.kurims.kyoto-u.ac.jp/soft/lsl/lablgtk/html/GText.html.

Тем не менее, лучший учебник или простой / понятный пример, который я нашел, использует очень ограничивающий однострочный текстовый блок ввода: http://plus.kaist.ac.kr/~shoh/ocaml/lablgtk2/lablgtk2-tutorial/x1155.html

Я обнаружил, что некоторые простые простые производные примеры отлично подходят для изучения основ. У кого-нибудь есть пример виньетки, которая показывает, как настроить многострочный текст с помощью OCaml & Lablgtk/lablgtk2? Или лучше рекомендации для учебников, которые покажут, как разработать многострочное текстовое поле (что является довольно важной функцией в любой программе на основе GUI)? В идеале я хочу подключить ввод текста в этот многострочный текст к написанному мной модулю OCaml, который будет обрабатывать этот текст, а затем графический интерфейс отображает результаты обработки обратно в графическом интерфейсе. Любая помощь будет принята с благодарностью.

3 ответа

Вы можете использовать виджет GtkTextView для многострочного текста:

let _ =
    (* prepare main window *)
    let window = GWindow.window () in
    window#connect#destroy ~callback:GMain.Main.quit;

    (* add text view with scroll bars *)
    let scroll = GBin.scrolled_window
                 ~hpolicy:`AUTOMATIC ~vpolicy:`AUTOMATIC
                 ~packing:window#add () in
    let textview = GText.view ~packing:scroll#add_with_viewport () in

    (* set text *)
    textview#buffer#set_text "multi-\nline\ntext";

    (* show everything and enter main loop *)
    window#show ();
    GMain.Main.main ()

Вы правы, что документы очень скудные. Поэтому мы должны учиться, копируя друг друга. Как обезьяны...

Держу пари, что ocamleditor должен содержать пример того, как это сделать: https://forge.ocamlcore.org/projects/ocamleditor/

Также OCP создает простой редактор OCaml, который также должен быть полезным: https://github.com/OCamlPro/ocp-edit-simple

Исходный код lablgtk2 предоставляет базовые фрагменты кода, которые легко понять с самого начала (по крайней мере, проще, чем код реального мира)

Если вы используете godi, они устанавливаются в $GODI_PRFIX/doc/godi-lablgtk2/examples . Вы можете увидеть их в действии из командной строки с помощью скрипта lablgtk2, например

lablgtk2 /opt/wodi32/doc/godi-lablgtk2/examples/editor.ml
lablgtk2 /opt/wodi32/doc/godi-lablgtk2/examples/text/text-demo.ml
Другие вопросы по тегам