我有一个小的gtk-rs
应用程序,我试图显示一个输入字段,并从用户那里获得输入。目前,当用户单击按钮时,我无法从输入字段中获得输入。我知道button.connect_clicked
是我需要做的,但我不知道如何做?
我的build_ui方法:
use gtk::prelude::*;
use gtk::{Application, ApplicationWindow, Button, Orientation};
pub fn build_ui(app: &Application) {
let button = Button::builder()
.label("Submit")
.margin_top(12)
.margin_bottom(12)
.margin_start(12)
.margin_end(12)
.build();
let input = gtk::Entry::builder()
.placeholder_text("input")
.margin_top(12)
.margin_bottom(12)
.margin_start(12)
.margin_end(12)
.build();
let gtk_box = gtk::Box::builder()
.orientation(Orientation::Vertical)
.build();
gtk_box.append(&input);
gtk_box.append(&button);
button.connect_clicked(move | _button| {
println!("{}", input.display());
});
let window = ApplicationWindow::builder()
.application(app)
.title("gtk-app")
.child(>k_box)
.default_height(720)
.default_width(360)
.build();
window.present();
}
main.rs:
const APP_ID: &str = "org.my-gtk-app";
fn main() {
// Create a new application
let app = Application::builder().application_id(APP_ID).build();
// Connect to "activate" signal of `app`
app.connect_activate(home::build_ui);
// Run the application
app.run();
}
我发现this question几乎是完全相同的,但是当我尝试实现该解决方案时,所有的.add方法都抛出一个错误,说明:
the following trait bounds were not satisfied: `ApplicationWindow: IsA<CellArea>` which is required by `ApplicationWindow: gtk4::prelude::CellAreaExt`
**编辑:**根据编译器,Gtk::Entry
也没有.get_text()
方法。在谷歌上搜索了一下,GTK3似乎有Gtk::Entry
的get_text
方法,但Gtk4没有。
那么,有人知道在使用Gtk4时如何从Gtk::Entry对象中获取文本吗?
**编辑2:**我想我需要使用.display()
方法,但是当我现在运行代码时,我没有从用户那里得到文本输入。input.display()
只返回一个空字符串。我更新了代码示例以反映这些更改。
1条答案
按热度按时间kninwzqo1#
Entry
确实有一个text()
方法,它给你一个GString
(因为Entry
实现了Editable
),可以使用as_str()
将其转换为一个ruststr
。因此,为了从条目中获取当前文本,您可以执行以下操作:
为了完整起见,下面是更新后的
build_ui
函数:编辑
由于
GString
实现了Display
,因此以下代码也可以正常工作: