以下是在Debian上进行Rust图形界面开发的教程,以GTK和Iced为例:
安装依赖
sudo apt update
sudo apt install libgtk-3-dev pkg-config
创建项目并添加依赖
cargo new rust_gtk_app --bin
cd rust_gtk_app
在Cargo.toml
中添加:
[dependencies]
gtk = "0.16" # 检查最新版本
编写代码
use gtk::prelude::*;
use gtk::{Application, ApplicationWindow, Button};
fn main() {
let app = Application::new(Some("com.example.gtkapp"), Default::default())
.expect("初始化失败");
app.connect_activate(|app| {
let window = ApplicationWindow::new(app);
window.set_title("GTK示例");
window.set_default_size(300, 200);
let button = Button::with_label("点击我");
button.connect_clicked(|_| println!("按钮被点击!"));
window.add(&button);
window.show_all();
});
app.run();
}
运行程序
cargo run
安装依赖
sudo apt update
sudo apt install libgtk-3-dev # Iced依赖GTK
创建项目并添加依赖
cargo new iced_app --bin
cd iced_app
在Cargo.toml
中添加:
[dependencies]
iced = "0.10" # 检查最新版本
编写代码
use iced::{button, Button, Column, Element, Sandbox, Settings, Text};
struct MyApp {
counter: i32,
increment_button: button::State,
}
#[derive(Debug, Clone)]
enum Message {
Increment,
}
impl Sandbox for MyApp {
type Message = Message;
fn new() -> Self {
MyApp {
counter: 0,
increment_button: button::State::new(),
}
}
fn title(&self) -> String {
String::from("Iced示例")
}
fn update(&mut self, message: Message) {
match message {
Message::Increment => self.counter += 1,
}
}
fn view(&mut self) -> Element<Message> {
Column::new()
.push(Text::new(format!("计数器: {}", self.counter)))
.push(Button::new(&mut self.increment_button, Text::new("增加"))
.on_press(Message::Increment))
.into()
}
}
fn main() -> iced::Result {
MyApp::run(Settings::default())
}
运行程序
cargo run
rust-qt
绑定,参考官方文档。libgtk-3-dev
)。