Iced Pick_List - borrow trait not implemented error
⚓ Rust 📅 2026-04-04 👤 surdeus 👁️ 6I have a view that works. I am attempting to add a pick_list widget with no success. It is my first attempt using a pick_list so I have modeled my code after the example with fruits in the iced documentation. I get two errors. 1) "selected_time_interval" needs to implement the borrow trait but I have not idea how to do that. 2) "intervals" has a mismatched type. Intervals is an array but pick_list expects an Option but the example in the iced doc appears to use an array. Any assistance will be appreciated.
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum TimeInterval {
QtrYear,
HalfYear,
OneYear,
AllYears,
}
pub struct State {
pub records_read: u64,
pub records_inserted: u64,
pub records_updated: u64,
pub screen: Screen,
pub closing_values: Vec<QueryResults>,
pub all_closing_values: Vec<QueryResults>,
pub heading: String,
pub time_interval: i64,
pub selected_time_interval: Option<TimeInterval>,
}
pub fn testing_view<'a>(heading: & str, query_results: &Vec<QueryResults>, selected_time_interval: &Option<TimeInterval>) -> iced::Element<'a, Message> {
let mut col1: widget::Column<'_,Message, Theme, Renderer> = widget::Column::new();
let mut col2: widget::Column<'_,Message, Theme, Renderer> = widget::Column::new();
let cell_width = 150.0;
let cell_height = 30.0;
for result in query_results {
let naive_date = NaiveDate::parse_from_str(&result.date, "%Y-%m-%d").unwrap();
let formatted_date = naive_date.format("%b %e, %Y").to_string();
col1 = col1.push(widget::container(
widget::text(format!("{}", formatted_date))
.size(20.0)
)
.width(Length::Fixed(cell_width))
.height(Length::Fixed(cell_height))
.align_x(Horizontal::Center)
.align_y(Vertical::Center)
.style(container_style_spreadsheet)
);
col2 = col2.push(widget::container(
widget::text(format!("${:.2}", result.close))
.size(20.0)
)
.width(Length::Fixed(cell_width))
.height(Length::Fixed(cell_height))
.align_x(Horizontal::Center)
.align_y(Vertical::Center)
.style(container_style_spreadsheet)
);
}
let intervals = [
TimeInterval::QtrYear,
TimeInterval::HalfYear,
TimeInterval::OneYear,
TimeInterval::AllYears,
];
let column_widget =
widget::column![
widget::container(
widget::button(widget::text("Home").size(15.0))
.on_press(Message::GoToHomeScreen)
.style(btn_blue_no_border)
)
.width(Length::Fill)
.align_x(Horizontal::Right)
.align_y(Vertical::Top),
widget::container(
widget::text(format!("{}", heading)).size(30.0)
)
.width(Length::Fill)
.padding(iced::padding::bottom(10))
.align_x(Horizontal::Center)
.align_y(Vertical::Center),
widget::container(
widget::row![
widget::text("Date").size(20.0),
widget::text("Close").size(20.0),
]
.width(Length::Fill)
.spacing(110)
.padding(iced::padding::top(20))
.padding(iced::padding::left(200))
)
.width(Length::Fill)
.align_x(Horizontal::Center),
widget::container(
widget::rule::horizontal(1)
.style(horizontal_rule)
)
.width(Length::Fill)
.padding(iced::padding::bottom(10)),
widget::container(
widget::row![
widget::container(
widget::space()
// widget::text("")
)
.width(Length::FillPortion(1)),
widget::container(
widget::scrollable(
widget::row![
col1
.align_x(Horizontal::Right)
.width(Length::FillPortion(1)),
col2
.align_x(Horizontal::Left)
.width(Length::FillPortion(1)),
] // end of row
) // end of scrollable
) // end of inner container
.width(Length::FillPortion(2))
.align_x(Horizontal::Center)
.align_y(Vertical::Top)
.style(container_style_grid),
// put pick list in container below ###############################################
widget::container(
widget::pick_list(
selected_time_interval,
// error: the trait borrow<&TimeInterval> is not implemented for &Option<TimeInterval>
// selected_time_interval is a state variable passed in
// initial value for some_time_interval set in new function as follows:
//selected_time_interval: Some(TimeInterval::QtrYear),
Some(intervals),
// this variable is created above
TimeInterval::to_string,
// the std::fmt::Display trait is implemented for TimeInterval
)
.on_select(Message::TimeIntervalSelected)
.placeholder("Select Time Interval")
.width(Length::Fixed(100.0))
)
.width(Length::FillPortion(1)),
], // end of row
) // end of outer container
.width(Length::Fill)
.align_x(Horizontal::Center)
.padding(iced::padding::bottom(14)),
]; // end of column
let my_container: widget::Container<'_, Message> =
widget::Container::new(column_widget)
.width(Length::Fill)
.height(Length::Fill)
.style(container_style);
my_container.into()
}
3 posts - 3 participants
🏷️ Rust_feed