Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimana untuk Mengelakkan Isu Penutupan Lambda Apabila Menetapkan Perintah Butang dalam Tkinter For Loop?
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!