试图在gtk-rs中调用gtk主循环



我想用gtk4-rs做一个简单的窗口老实说,我找不到关于如何调用GTK主循环的文档

use gtk::prelude::*;
fn main() {
// call gtk::init() to initialize gtk.
if gtk::init().is_err() {
println!("Failed to initialize GTK.");
return;
}
let win = gtk::Window::new();
let lab = gtk::Label::new(Some("Type something"));
let text_area = gtk::Entry::new();

// create a grid to hold the widgets
let grid = gtk::Grid::new();
grid.set_column_spacing(10);
grid.set_row_spacing(10);
grid.attach(&lab, 0, 0, 1, 1);
grid.attach(&text_area, 1, 0, 1, 1);

win.set_child(Some(&grid));

win.show();
}

您缺少GTK的Application,它会自动初始化GTK并创建事件循环:

use gtk::prelude::*;
fn main() {
let application =
gtk::Application::new(Some("application-id"), Default::default());
application.connect_activate(build_ui);
application.run();
}
fn build_ui(app: &gtk::Application) {
let win = gtk::ApplicationWindow::new(app);
let lab = gtk::Label::new(Some("Type something"));
let text_area = gtk::Entry::new();

// create a grid to hold the widgets
let grid = gtk::Grid::new();
grid.set_column_spacing(10);
grid.set_row_spacing(10);
grid.attach(&lab, 0, 0, 1, 1);
grid.attach(&text_area, 1, 0, 1, 1);

win.set_child(Some(&grid));

win.show();
}

gtk-rs书中有关于这方面的更多信息。

最新更新