Rust에서 GUI ~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.rsextern 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를 사용하기 위해 초기화합니다.
그리고 window
과 widget
을 각각 생성합니다.
다음으로 배치를 위해 세로 방향의 Box
( vbox
)을 준비하고 있습니다. 실은 window
은 widget
을 단지 하나 밖에 가질 수 없습니다. 그래서 Box
을 만드는 동안 widget
을 채우고 하나의 widget
과 같은 것으로 정리해 Window
이 유지하도록 하고 있습니다.
그 후 window
이 지워졌을 때 무엇을 하는지의 설정과 버튼을 눌렀을 때에 무엇을 할지의 이벤트를 설정해, 마지막으로 gtk::main()
에서 gtk를 실행해 코드 자체는 종료입니다.
코드 자체는 그리 어렵지 않다고 생각합니다.
소감
다른 언어에 의한 gtk와 매우 비슷한 쓰기 기분입니다. gtk 사용자라면 문서을 조금 보는 것만으로 쓰기 시작할 수 있다고 생각합니다.
일단 html처럼 쓸 수 있다. 같지만, 역시 레이아웃은 복잡한 것은 서투른 것 같습니다. 뭔가 좋은 방법이 있다면 코멘트 등으로 알려주세요.
요약
gtk 자체 유명하기 때문에 알아보면 간단하게 정보는 나온다. GUI 등 한 번도 쓴 적이 없다고 하는 사람에게는 추천하는 크레이트라고 생각한다.
Reference
이 문제에 관하여(Rust에서 GUI ~gtk편~), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/ogata-k/items/76ff6c46ac49239685de
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
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();
}
if gtk::init().is_err() {
println!("Faild to initialize GTK");
return;
}
Reference
이 문제에 관하여(Rust에서 GUI ~gtk편~), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ogata-k/items/76ff6c46ac49239685de텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)