Bagikan ke: Twitter | Facebook | LinkedIn
Daftar isi
Pendahuluan
sebelum saya melanjutkan post ini saya ingin menjelaskan bahwa Materi dalam blog atau artikel ini belum ditinjau, didukung, atau disetujui oleh Rust Foundation. Untuk informasi lebih lanjut silakan klik link yang ada di Daftar Pustaka.
gtk-rs merupakan sebuah binding safe untuk GNOME stack untuk bahasa program Rust, yang dimaksud dengan GNOME stack adalah, gtk-rs memberikan dukungan untuk GLib, Cairo, GTK3 dan GTK4, dan di post kali ini saya ingin memperkenalkan cara membuat gtk app sederhana, karna untuk membuat gtk app kita bisa menggunakan 2 cara yaitu composite template dan menulis secara langsungg, karna composite template lebih rumit daripada mengetik kode langsung, kita akan menggunakan cara kedua, yaitu menggetik langsung.
jika pembaca ingin mendalami cara membuat gtk4 atau mungkin membuat GNOME app, saya rekomendasikan membaca “The introductory book” yang ada di web gtk-rs
Membuat Proyek
sebelum kita mengetik sebuah kode kita akan membuat proyek dengan cargo, dalam post ini saya asumsikan pembaca sudah menginstall Rust toolchain melalui rustup dan mengerti dasar-dasar programming dalam bahasa Rust,
cargo new gtk-test
setelah itu kita menambahkan dependensi pada proyek kita
cargo add gtk4 --rename gtk --features v4_8
opsi --rename
disini, kita akan mengubah nama dependensi menjadi nama
gtk
lalu kita menggunakan opsi --features
agar kita bisa menggunakan
API GTK versi 4.8
Membuat gui app
untuk memulai membuat gtk app kita membuka file app.rs
, urutan untuk
membuat sebuah applikasi gui gtk adalah membuat app lalu membuat window,
untuk membuat app kita akan menambahkan kode ini ke dalam fungsi main,
namun sebelum itu dalam gtk app atau gnome app kita memerlukan app id,
kita bisa menseting APP id sedagai constan
const APP_ID: &str = "io.github.aerphanas";
lalu kita bisa menambah kode dibawah
fn main() -> glib::ExitCode {
let app = Application::builder().application_id(APP_ID).build();
.connect_activate(build_ui);
app.run()
app}
dari kode diatas kita menggunakan sebuah design pattern OOP builder untuk membuat aplikasi lalu kita menambahkan sebuah APPID untuk memberitahukan bahwa applikasi kita id “io.github.aerphanas”, setelah itu kita akan menambahkan sebuah fungsi yang akan di jalankan saat membuat applikasi, dalam hal ini kita akan memberikan sebuah fungsi yangg akan menghasilkan sebuah window, seperti inilah fungsi yang kita berikan
fn build_ui(app: &Application) {
let button_res: Button = Button::builder().label("Hello").build();
let window: ApplicationWindow = ApplicationWindow::builder()
.application(app)
.title("Hello")
.child(&button_res)
.build();
.present();
window}
di fungsi ini kita membuat sebuah tombol yang memiliki sebuah label
Hello
kemudian kita membuat sebuah window denggan title Hello
yang
memiliki anak button, yang di maksud anak disini adalah bahwa variable
button_res
akan berada didalam window, setelah itu kita menampilkan
window dengan method present()
setelah itu kita bisa menjalankan
dengan perintah
cargo run
setelah dijalankan, sebuah jendela akan muncul namun ketika mengklik
tombol Hello
tidak terjadi apa-apa, karna kita tidak
mengimplementasikan apa yang terjadi saat kita mengklik tombol, sebelum
mengimplementasikanya kita bisa melihat dokumentasi gtk-rs
, bila kita
lihat dokumentasi gtk4::button
, gtk4::button
mengimplementasikan
trait ButtonExt
dimana terdapat fungsi connect_clicked
yang dalam
dokumentasi artinya
Emitted when the button has been activated (pressed and released).
atau lakukan sesuatu jika tombol ditekan dan dilepaskan
, fungsi ini
memiliki signature
fn connect_clicked<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId
dalam signature tersebut fungsi connect_clicked
mengambil sebuah
fungsi lalu mengembalikan sebuah signalhandlerid, dalam hal ini kita
bisa membuat sebuah fungsi atau sebuah closure atau fungsi lambda,
sebagai contoh disini kita bisa mencoba membuat jika tombol ditekan akan
menampilkan sebuah pesan di terminal, deklarasi fungsi ini harus
dilakukan sebelum membuat variable window
.connect_clicked(|_| println!("hello world")); button_res
setelah itu kita bisa jalankan program kita, dan jika kita mengklik
tombol berlabel Hello
kita akan melihat hello world
dalam terminal,
kita bisa melihat semua fungsi yang diberikan gtk-rs
di dokumentasi,
janganlah khawatir dokumentasi gtk-rs
sangatlah rapih, jika kalian
mengerti bahasa Rust maka akan dengan mudah membuat gtk app dengan
gtk-rs
.
jika ingin mendalami cara membuat gtk app atau mungkin gnome app saya sarankan untuk membaca tutorial berjudul “GUI development with Rust and GTK 4” yang ditulis oleh Julian Hofer, tutorial tersebut bisa kalian temukan di website gtk-rs
Daftar Pustaka
Rust Foundation
→ Rust Foundationgtk-rs
→ Home Pagerustup
→ Home Pagecargo
→ gtk4GUI development with Rust and GTK 4, by Julian Hofer
→ introduction