rust gtk-rs改变页面上的小部件的设计模式是什么?

qzwqbdag  于 2023-01-05  发布在  其他
关注(0)|答案(1)|浏览(134)

我正在使用gtk-rs构建一个小应用程序,我正在为改变页面上显示的小部件而挣扎,到目前为止,我一直在使用this guide,但我还没有找到我要寻找的信息。
例如,您打开应用程序并从登录页面开始,然后单击一个按钮,它会将您带到另一个页面/视图,其中包含不同的小部件。
我知道如何用一组小部件构建一个页面,我可以更新这些小部件的内容,但我不知道如何加载一个全新的布局或删除小部件并替换它们。
有没有人有一个链接到一个指南或类似的东西来详细说明如何做到这一点?如果这不是我们应该用gtk-rs来做这件事的方式,你能告诉我一些详细说明我们应该如何做这件事的东西吗?
我一直在谷歌上搜索像gtk-rs redraw windowgtk-rs change widgetsgtk-rs new view这样的东西,但是这些都没有返回如何处理这个问题的解释。
下面是指南中的一个例子。假设我们在这个应用程序中按下了按钮,我想加载一个带有不同按钮的页面。

fn main() {
    // Create a new application
    let app = Application::builder().application_id(APP_ID).build();

    // Connect to "activate" signal of `app`
    app.connect_activate(build_ui);

    // Run the application
    app.run();
}

fn build_ui(app: &Application) {
    // Create a button
    let button = Button::builder()
        .label("Press me!")
        .margin_top(12)
        .margin_bottom(12)
        .margin_start(12)
        .margin_end(12)
        .build();

    // Connect to "clicked" signal of `button`
    button.connect_clicked(move |_| {
        println!("The button was pressed!");
    });

    // Create a window
    let window = ApplicationWindow::builder()
        .application(app)
        .title("My GTK App")
        .child(&button)
        .build();

    // Present window
    window.present();
}
mf98qq94

mf98qq941#

我使用Stack来实现这个目的。在这里,看看这个link。使用StackPage来添加页面。
这里有一个例子。

use gtk::Application;
use gtk::{prelude::*, ApplicationWindow};
use gtk::StackTransitionType::SlideLeftRight;

fn main() {

    let app = Application::builder()
        .application_id("com.artognak.markiv")
        .build();

    app.connect_activate(build_ui);

    app.run();
}

fn build_ui(app: &Application) {

    let window = ApplicationWindow::builder()
        .application(app)
        .default_width(360)
        .default_height(360)
        .build();

    let container = gtk::Box::new(gtk::Orientation::Vertical, 100);
    window.set_child(Some(&container));

    let stack = gtk::Stack::new();

    stack.set_transition_type(SlideLeftRight);
    stack.set_transition_duration(200);

    let page_1_label = gtk::Label::new(Some("Page 1"));
    stack.add_titled(&page_1_label, Option::<&str>::None, "Page 1");

    let page_2_label = gtk::Label::new(Some("Page 2"));
    stack.add_titled(&page_2_label, Option::<&str>::None, "Page 2");

    let stack_switcher = gtk::StackSwitcher::new();
    stack_switcher.set_stack(Some(&stack));

    container.append(&stack_switcher);
    container.append(&stack);

    window.present();
}

你也可以通过设置Stack的可见子名称来切换页面,这样你就不需要StackSwitcher了。

相关问题