rust - Gtk 小部件即使在保存数据时也返回 None
问题描述
我的 UI 中有一个文件选择器和一个组合框文本。现在我正在尝试从这两个内部回调中提取数据,但是即使它们清楚地具有用户设置的数据,它们也返回给我 None 。为什么会这样?
摘自https://gitlab.com/9898287/nixwriter/-/blob/rir/src/frontend/mod.rs#L41
fn get_selected_file(&self) -> Option<std::path::PathBuf> {
let selected_file = self.fcn.get_filename();
dbg!(&selected_file);
selected_file
}
摘自https://gitlab.com/9898287/nixwriter/-/blob/rir/src/frontend/mod.rs#L35
fn get_selected_device(&self) -> Option<udisks::DiskDevice> {
// Combo box text only stores a Gstring (Device ID)
// Search through the list of devices from udisks2 again
// and find the device with matching device ID
let selected_device = match self.lsblk_cbt.get_active_text() {
Some(txt) => {
dbg!(&txt);
for disk in crate::aux::backend::get_disks() {
if disk.drive.id == txt {
return Some(disk);
}
}
dbg!("No matching device found. Must reload.");
None
}
None => {
dbg!("lsblk_cbt is returning nothing");
None
}
};
dbg!(&selected_device);
selected_device
}
两者都在https://gitlab.com/9898287/nixwriter/-/blob/rir/src/frontend/mod.rs#L110中返回 None
fn set_lsblk_cbt(&mut self) {
let cbt = self.lsblk_cbt.clone();
for ddev in crate::aux::backend::get_disks() {
cbt.append_text(&ddev.drive.id);
}
let (device_chosen, file_chosen) = (
self.get_selected_device().is_some(),
self.get_selected_file().is_some(),
);
let start = self.start.clone();
cbt.connect_changed(move |_| {
start.set_sensitive(device_chosen && file_chosen);
dbg!("From set_lsblk_cbt", device_chosen, file_chosen);
});
}
即使在用户设置了文件并从 ComboboxText 中选择了一个项目之后。
解决方案
推荐阅读
- mongodb - 获取 Mongo 集合字段的值代替 ObjectId
- unity3d - 为什么 Motion Blur 后期处理效果在 Unity (mac) 中不起作用?
- azure - 错误:Azure 逻辑应用程序在读取 Azure Blob 存储时抛出错误 | 状态 400 - 指定的资源名称包含无效字符
- json - snapshot.hasData 为 true 但 snapshot.data.length 为空,Flutter
- java - 如何在会话失效时删除 JSESSIONID cookie
- ios - 如何将分发方式从私有更改为公共?
- c# - 如何将渐变颜色添加到 DataGridView 突出显示的行 C#
- c# - 如何使用 c# 从 cudy lte n300 4g 路由器发送短信
- php - 使用 docker-compose up 构建 PHP 与 sudo 有问题
- snakemake - 一个snakemake作业会错误地同时运行两次吗?