Gtk小部件即使保存数据也不会返回None

时间:2020-07-21 01:15:09

标签: rust gtk-rs

我的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中都不返回

    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中选择了一个项目。

0 个答案:

没有答案