Rumah > pembangunan bahagian belakang > Tutorial Python > Bagaimanakah `mainloop`, `update` dan `update_idletasks` Tkinter Berbeza dan Bilakah Anda Perlu Menggunakan `after` Daripada Gelung `while` untuk Animasi?

Bagaimanakah `mainloop`, `update` dan `update_idletasks` Tkinter Berbeza dan Bilakah Anda Perlu Menggunakan `after` Daripada Gelung `while` untuk Animasi?

Susan Sarandon
Lepaskan: 2024-12-17 19:18:15
asal
218 orang telah melayarinya

How Does Tkinter's `mainloop`, `update`, and `update_idletasks` Differ, and When Should You Use `after` Instead of a `while` Loop for Animations?

Memahami gelung utama Tkinter

Dalam Tkinter, kaedah gelung utama digunakan untuk memulakan gelung acara utama aplikasi. Apabila dipanggil, ia memasuki gelung tak terhingga yang menunggu dan memproses peristiwa pengguna seperti klik tetikus, penekanan papan kekunci dan saiz semula tetingkap. Dengan menyemak acara secara berterusan, mainloop memastikan bahawa antara muka pengguna grafik (GUI) kekal responsif kepada input pengguna.

Di dalam gelung acara gelung utama, tetingkap utama aplikasi (biasanya contoh Tk) memantau acara sistem pengendalian asas beratur. Apabila peristiwa berlaku, seperti klik tetikus atau saiz semula tetingkap, fungsi panggil balik tetingkap dicetuskan untuk mengendalikan pemprosesan acara.

Perbezaan antara kemas kini, kemas kini_idletasks dan gelung utama

Tkinter juga menyediakan dua kaedah lain, kemas kini dan pengemaskinian_tugasan, yang mempunyai tujuan yang berbeza daripada mainloop.

  • kemas kini: Memasuki gelung acara Tkinter utama untuk memproses semua acara belum selesai, termasuk kedua-dua acara pengguna dan panggilan balik terbiar. Ia menyekat pelaksanaan program Python sehingga semua acara telah dikendalikan.
  • update_idletasks: Memproses hanya panggilan balik terbiar, yang merupakan tugas keutamaan rendah yang boleh ditangguhkan sehingga tiada apa-apa lagi untuk dilakukan. Ia tidak menunggu acara pengguna atau menyekat pelaksanaan program.

Mengalih Keluar Gelung Semasa

Contoh kod yang disediakan menggunakan gelung sementara untuk mengemas kini kanvas secara berterusan dan mensimulasikan pergerakan sebiji bola. Dengan memanggil update_idletasks() dan update() dalam gelung, ia meniru gelagat mainloop. Walaupun pendekatan ini boleh berfungsi dengan berkesan, terdapat alternatif yang lebih baik yang tidak memerlukan gelung sementara yang jelas.

Kaedah selepas Tkinter membolehkan anda menjadualkan fungsi untuk dilaksanakan selepas kelewatan yang ditentukan. Menggunakan selepas itu, anda boleh menggantikan gelung sementara dan mencapai kesan animasi tidak menyekat seperti berikut:

def draw(self):
    self.canvas.move(self.id, 0, -1)
    self.canvas.after(50, self.draw)  # Schedule draw() to be invoked after 50 milliseconds
Salin selepas log masuk

Dalam coretan kod yang diubah suai ini, kaedah cabutan menjadualkan sendiri untuk digunakan semula selepas kelewatan 50 milisaat melalui kaedah selepas. Ini membolehkan GUI kekal responsif kepada input pengguna semasa animasi sedang dilaksanakan.

Atas ialah kandungan terperinci Bagaimanakah `mainloop`, `update` dan `update_idletasks` Tkinter Berbeza dan Bilakah Anda Perlu Menggunakan `after` Daripada Gelung `while` untuk Animasi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan