Saya membuat aplikasi dengan Python, yang menggunakan GTK untuk membangun UI, dan saya sedikit bingung menangani Objek GTK di Threads, misalnya objek GtkProgressBar.
Inilah konteksnya:
Saya mencoba melakukan pengunduhan di Thread Utama, dan saya menambahkan GObject.timeout_add
untuk menggerakkan bilah hingga Pengunduhan berakhir. Namun setelah pulsa pertama UI membeku.
Sampai disana OK, Thread dibekukan hingga download selesai, jadi komponen apa pun akan diperbarui. Solusi: Buat Thread baru.
Saya membuat thread baru ini untuk melakukan Download, dan hal lainnya. Di thread ini, saya menerima bilah kemajuan untuk melakukan pembaruan. Namun saat pengunduhan sedang berjalan dan saya menambahkan GObject.timeout_add
ke bilah pulse, UI terhenti lagi. Solusi Baru: Buat thread ketiga.
Jadi thread saya terlihat seperti ini:
Main-Thread
'---- Thread 1
'------Thread 2
Jadi, di Thread 1
, saya membuat hal lain dan memperbarui UI, sementara di Thread 2
saya mengunduh dan menambahkan GObject.timeout_add
dan di sana saya dapat memperbarui bilah kemajuan. Dan di Thread 1
saya bergabung dengan Thread 2
Saya menangani Objek Gtk menggunakan fungsi GObject.idle_add
.
Tapi saya sangat bingung mengapa pengunduhan dan pembaruan bilah kemajuan berfungsi dengan baik di Thread 2
dan tidak di Thread 1
Seseorang dapat menjelaskan kepada saya mengapa hal itu terjadi, atau jika saya melewatkan sesuatu tentang menangani objek GTK.
Terima kasih