Rust에서 GUI ~gtk편~

9182 단어 GUIgtkRust
전체 코드는 github ogata-k/GUI_cmp/example_gtk을 참조하십시오.

gtk



이번에 사용할 버전은 0.5.0입니다.

어떤 크레이트가



gtk はGTK+ 3とCairo、GtkSourceView、そしてGLibの互換性のあるライブラリ(つまり cairo-rs , gdk , gdk-pixbuf , gio , glib , gtk , pango , sourceview )を結びつけるためのクレートです.
이 gtk 크레이트는 OS에 GTK+, GLib, Cairo 설치 되어 있어야 하므로 주의가 필요합니다.

코드



버튼을 누른 수를 세는 프로그램을 만들어갑니다.

main.rs
extern crate gtk;

use gtk::prelude::*;
use gtk::{Button, Label, Window, WindowType};

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

  // windowの作成
  let window = Window::new(WindowType::Toplevel);
  window.set_title("カウントアップ");
  window.set_default_size(400, 300);  // 横×縦

  // 各widgetの作成
  let label = Label::new("0");
  let button = Button::new_with_label("+1");

  // windowへの配置
  let vbox = gtk::Box::new(gtk::Orientation::Vertical, 2);
  // child: &P, expand: bool, fill: bool, padding: u32
  vbox.pack_start(&label, true, true, 3); 
  vbox.pack_start(&button, false, true, 2);
  window.add(&vbox);

  // 初期表示
  window.show_all();

  // eventの設定
  window.connect_delete_event(|_, _| {
    gtk::main_quit();
    Inhibit(false)
  });

  let label_c = label.clone();
  button.connect_clicked(move |_| {
    let old_num: u16 = label_c.get_text().unwrap().to_string().parse::<u16>().unwrap();
    label.set_text(&(old_num + 1).to_string());
    println!("カウント+1");
  });

  // GUIの実行
  gtk::main();
}



코드 설명



다른 언어의 gtk에서의 쓰는 방법과 거의 비슷하기 때문에 설명은 필요 없다고 생각합니다만, 만약을 위해.
우선
if gtk::init().is_err() {
    println!("Faild to initialize GTK");
    return;
  }

에서 gtk를 사용하기 위해 초기화합니다.
그리고 windowwidget을 각각 생성합니다.
다음으로 배치를 위해 세로 방향의 Box ( vbox )을 준비하고 있습니다. 실은 windowwidget 을 단지 하나 밖에 가질 수 없습니다. 그래서 Box 을 만드는 동안 widget 을 채우고 하나의 widget 과 같은 것으로 정리해 Window 이 유지하도록 하고 있습니다.
그 후 window이 지워졌을 때 무엇을 하는지의 설정과 버튼을 눌렀을 때에 무엇을 할지의 이벤트를 설정해, 마지막으로 gtk::main()에서 gtk를 실행해 코드 자체는 종료입니다.

코드 자체는 그리 어렵지 않다고 생각합니다.

소감



다른 언어에 의한 gtk와 매우 비슷한 쓰기 기분입니다. gtk 사용자라면 문서을 조금 보는 것만으로 쓰기 시작할 수 있다고 생각합니다.
일단 html처럼 쓸 수 있다. 같지만, 역시 레이아웃은 복잡한 것은 서투른 것 같습니다. 뭔가 좋은 방법이 있다면 코멘트 등으로 알려주세요.

요약



gtk 자체 유명하기 때문에 알아보면 간단하게 정보는 나온다. GUI 등 한 번도 쓴 적이 없다고 하는 사람에게는 추천하는 크레이트라고 생각한다.

좋은 웹페이지 즐겨찾기