実現したいこと
iced::TextInput
を用いて
テキストボックスをGUI上に表示し、
文字を入力できるようにしたいです。
環境
- macOSネイティブアプリとして実行しています
- iced のバージョンについて
Cargo.toml に記載していなかったっため、
Cargo.lock を確認したところ、0.3.0 でした。
[[package]] name = "iced" version = "0.3.0"
発生している問題
テキストボックスを表示することはできましたが、
クリックしてもフォーカスできず、文字を入力できません。
試したこと
TextInput::new
の第3引数に問題があると考え、
以下のパターンを試しましたが、文字入力できない状態のままでした。
- 文字列リテラル
""
を渡す - String オブジェクトへの参照を渡す
ソースコード
main.rs
rust
1use iced::{TextInput, text_input, Application, Command, Clipboard, Element, Settings}; 2 3fn main() -> iced::Result { 4 App::run(Settings::default()) 5} 6 7struct App { 8 input_state: text_input::State, 9 text_value: String 10} 11 12impl Application for App { 13 type Executor = iced::executor::Default; 14 type Message = (); 15 type Flags = (); 16 17 fn new(_flags: Self::Flags) -> (Self, Command<Self::Message>) { 18 ( 19 App { 20 input_state: text_input::State::new(), 21 text_value: String::from("") 22 }, 23 Command::none() 24 ) 25 } 26 27 fn title(&self) -> String { 28 String::from("サンプル") 29 } 30 31 fn update(&mut self, _message: Self::Message, _clipboard: &mut Clipboard) -> Command<Self::Message> { 32 Command::none() 33 } 34 35 fn view(&mut self) -> Element<'_, Self::Message> { 36 TextInput::new( 37 &mut self.input_state, 38 "place holder", 39 &mut self.text_value, // String オブジェクトへの参照を渡す 40 |_string| {} 41 ).into() 42 } 43}
Cargo.toml
[package] name = "RustWithCLion" version = "0.1.0" edition = "2018" publish = false # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] iced = { features = ["async-std", "debug"] } serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" [target.'cfg(not(target_arch = "wasm32"))'.dependencies] async-std = "1.0" directories-next = "2.0" [target.'cfg(target_arch = "wasm32")'.dependencies] web-sys = { version = "0.3", features = ["Window", "Storage"] } wasm-timer = "0.2" [package.metadata.deb] assets = [ ["target/release/todos", "usr/bin/iced-todos", "755"], ["iced-todos.desktop", "usr/share/applications/", "644"], ]
実行結果
バージョン情報
mac OS BigSur 11.5.2 % cargo --version cargo 1.51.0 (43b129a20 2021-03-16) % rustc -V rustc 1.51.0 (2fd73fabe 2021-03-23) % rustup -V rustup 1.23.1 (3df2264a9 2020-11-30) info: This is the version for the rustup toolchain manager, not the rustc compiler. info: The currently active `rustc` version is `rustc 1.51.0 (2fd73fabe 2021-03-23)` % rustup show Default host: x86_64-apple-darwin installed targets for active toolchain -------------------------------------- wasm32-unknown-unknown x86_64-apple-darwin active toolchain ---------------- stable-x86_64-apple-darwin (default) rustc 1.51.0 (2fd73fabe 2021-03-23)
こんにちは。環境に依存した問題かもしれないので、アプリの形態について情報を追加してもらえないでしょうか?(質問に追記してください)
- macOSネイティブアプリとして実行している
または
- wasmアプリとしてWebブラウザー上で実行している
スクリーンショットの感じではmacOSネイティブアプリのようですが、APIドキュメントを見たところ、TextInput::newはiced_webクレートにしか存在しないようなので、その違い?が少し気になりました。
あと、Cargo.tomlでicedの version = 指定がないようですが、ここも少し変なので確認をお願いします。(指定がないとエラーになるものだと思ってました)
私はicedを試したことはないので、情報があってもすぐに答えはわからないのですが、もし、しばらく回答がつかないようなら、私の方でも調べてみようと思います。
> スクリーンショットの感じではmacOSネイティブアプリのようですが、APIドキュメントを見たところ、TextInput::newはiced_webクレートにしか存在しないようなので、その違い?が少し気になりました。
こちらについては謎か解けたと思います。iced_nativeクレートにもnewがありました。 https://docs.rs/iced_native/0.4.0/iced_native/widget/text_input/struct.TextInput.html#method.new
コメントとご調査ありがとうございます。ご返答遅れましてすみません、情報を追記いたしました。
情報を追記していただき、ありがとうございました。また、問題の方も解決したということでよかったです。
回答1件
あなたの回答
tips
プレビュー