Используйте GtkSourceView с Rust - PullRequest
1 голос
/ 29 апреля 2020

Я хочу использовать GtkSourceView в своем приложении Rust.

Я создал файл пользовательского интерфейса с помощью Glade. Мне пришлось установить компонент и связать его.

Это мой код Rust:

use gtk::prelude::*;


fn main() {
    if gtk::init().is_err() {
        println!("Failed to initialize GTK.");
        return;
    }
    let glade_src = include_str!("user_interface.glade");
    let builder = gtk::Builder::new_from_string(glade_src);    
    let window: gtk::Window = builder.get_object("main_window").unwrap();

    window.show_all();

    gtk::main();
}

... и ошибка, которую я получаю при попытке cargo run:

alex@smartalex-bed:~/.repos/codelib/rust/venom$ cargo run
    Finished dev [unoptimized + debuginfo] target(s) in 0.05s
     Running `target/debug/venom`

(venom:10028): Gtk-ERROR **: 04:25:30.689: failed to add UI: .:17:1 Invalid object type 'GtkSourceView'
Trace/breakpoint trap (core dumped)

Я нашел этот и попытался включить его в мой автомобиль go .toml, однако ошибка сохраняется.

Как я могу использовать GtkSourceView в моем приложении Rust ?

Это user_interface.glade:

<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.22.2 -->
<interface>
  <requires lib="gtk+" version="3.20"/>
  <requires lib="gtksourceview" version="4.0"/>
  <object class="GtkWindow" id="main_window">
    <property name="can_focus">False</property>
    <child type="titlebar">
      <placeholder/>
    </child>
    <child>
      <object class="GtkBox">
        <property name="visible">True</property>
        <property name="can_focus">False</property>
        <child>
          <object class="GtkSourceView">
            <property name="visible">True</property>
            <property name="can_focus">True</property>
            <property name="left_margin">2</property>
            <property name="right_margin">2</property>
            <property name="monospace">True</property>
            <property name="show_line_numbers">True</property>
            <property name="show_line_marks">True</property>
            <property name="tab_width">4</property>
            <property name="auto_indent">True</property>
            <property name="insert_spaces_instead_of_tabs">True</property>
            <property name="show_right_margin">True</property>
            <property name="highlight_current_line">True</property>
            <property name="smart_backspace">True</property>
          </object>
          <packing>
            <property name="expand">True</property>
            <property name="fill">True</property>
            <property name="position">0</property>
          </packing>
        </child>
        <child>
          <placeholder/>
        </child>
      </object>
    </child>
  </object>
</interface>

1 Ответ

2 голосов
/ 29 апреля 2020

Мне удалось запустить программу, добавив следующую строку:

sourceview::View::static_type();

Полный пример кода:

use gtk::prelude::*;

fn main() {
    if gtk::init().is_err() {
        println!("Failed to initialize GTK.");
        return;
    }

    sourceview::View::static_type();

    let glade_src = include_str!("user_interface.glade");
    let builder = gtk::Builder::new_from_string(glade_src);
    let window: gtk::Window = builder.get_object("main_window").unwrap();

    window.show_all();

    gtk::main();
}

Далее, Cargo.toml содержит следующие зависимости:

[dependencies]
gtk = { version = "*", features = ["v3_22"] }
sourceview = "*"
...