Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimana untuk Mengelakkan Isu Penutupan Lambda Apabila Menetapkan Perintah Butang dalam Tkinter For Loop?

Bagaimana untuk Mengelakkan Isu Penutupan Lambda Apabila Menetapkan Perintah Butang dalam Tkinter For Loop?

Patricia Arquette
Patricia Arquetteasal
2024-12-18 07:44:17178semak imbas

How to Avoid Lambda Closure Issues When Assigning Button Commands in a Tkinter For Loop?

Perintah Butang Tugasan Tkinter dalam Gelung Untuk dengan Lambda

Dalam Tkinter, anda mungkin menghadapi senario di mana anda perlu mencipta berbilang butang secara dinamik menggunakan gelung for, manakala setiap butang harus mempunyai perintah unik yang dikaitkan dengannya. Walau bagaimanapun, jika anda terus menggunakan pembolehubah gelung dalam ungkapan lambda untuk arahan, anda mungkin menghadapi masalah yang berpotensi.

Pertimbangkan kod berikut:

users = {"Test": "127.0.0.0", "Test2": "128.0.0.0"}
row = 1
for name in users:
    user_button = Tkinter.Button(self.root, text=name,
                                 command=lambda: self.a(name))
    user_button.grid(row=row, column=0)
    row += 1

Di sini, niatnya adalah untuk buat butang dengan nilai parameter unik untuk setiap pengguna. Walau bagaimanapun, apabila dilaksanakan, semua butang akan memanggil kaedah a() dengan nilai nama yang ditetapkan terakhir, menyebabkan setiap butang mencetak "Test2".

Untuk menangani isu ini, anda boleh memanfaatkan parameter kata kunci lalai dalam ungkapan lambda. Dengan memberikan nilai semasa nama kepada parameter baharu, anda mencipta fungsi unik untuk setiap lelaran:

user_button = Tkinter.Button(self.root, text=name,
                             command=lambda name=name: self.a(name))

Ini memastikan setiap butang mempunyai contoh fungsi lambda sendiri dengan parameter nama yang sepadan. Akibatnya, butang akan memanggil kaedah a() dengan betul dengan parameter yang dimaksudkan.

Atas ialah kandungan terperinci Bagaimana untuk Mengelakkan Isu Penutupan Lambda Apabila Menetapkan Perintah Butang dalam Tkinter For Loop?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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