gpt4 book ai didi

rust - Gtk::SpinButton get_value_as_int 给出 step_increment 作为结果

转载 作者:行者123 更新时间:2023-12-04 18:31:37 25 4
gpt4 key购买 nike

我正在努力使用 Relm 在 Rust 中使用 SpinButton。 (免责声明,我是 Rust GTK 的菜鸟)

#![feature(proc_macro)]
extern crate gtk;

use chrono::{NaiveTime, Duration};

use gtk::prelude::*;
use gtk::{
WidgetExt,
ContainerExt,
EntryExt,
Adjustment
};

use relm::Widget;
use relm_attributes::widget;

#[derive(Msg, Debug)]
pub enum Msg {
Changed,
Display,
}

#[widget]
impl Widget for DurationSpin {
fn model(m: Duration) -> Duration {
m
}

fn update(&mut self, event: Msg) {
match event {
Msg::Display => self.format_display(),
Msg::Changed => {
println!("update, self.spin_btn.get_value_as_int() = {:?}", self.spin_btn.get_value_as_int());
self.model = Duration::minutes(self.spin_btn.get_value_as_int() as i64)

},
};
}

fn format_display(&mut self) {
println!("format_display, self.spin_btn.get_value_as_int() = {:?}", self.spin_btn.get_value_as_int());
let minus = self.model.num_hours() * 60;
self.spin_btn.set_text(&format!("{:02}:{:02}",
self.model.num_hours(), self.model.num_minutes() - minus));
}

view! {
#[name="spin_btn"]
gtk::SpinButton {
max_width_chars: 5,
width_chars: 5,
max_length: 5,
numeric: false,
output => (Msg::Display, Inhibit(false)),
value_changed => Msg::Changed,
adjustment: &Adjustment::new(self.model.num_minutes() as f64, 0.0, 720.0, 1.0, 60.0, 0.0),
}
}
}

(整个项目在这里:https://github.com/Geobert/rusty_flexi)

我的问题是单击“+”会使 get_value_as_int 始终返回“1”。

似乎是我的 output 信号导致了这个,因为停用连接解决了这个错误,但我看不出它有什么问题。

最佳答案

output 信号处理程序似乎不能是异步的。这意味着您不应在这种情况下使用 relm 消息传递。

你应该这样做:

fn init_view(&mut self) {
let hours = self.model.num_hours();
let minutes = self.model.num_minutes();
self.spin_btn.connect_output(move |spin_btn| {
let minus = hours * 60;
spin_btn.set_text(&format!("{:02}:{:02}",
hours, minutes - minus));
Inhibit(false)
});
}

并删除 output => (Msg::Display, Inhibit(false)),

关于rust - Gtk::SpinButton get_value_as_int 给出 step_increment 作为结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44422439/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com