Menetapkan Perintah Butang dalam Tkinter For Loop menggunakan Lambda
Apabila mencipta butang dalam Tkinter for loop menggunakan fungsi lambda, adalah penting untuk mengelakkan menetapkan semula pembolehubah yang sama dalam gelung. Ini memastikan bahawa setiap butang menerima parameter unik.
Isu:
Dalam kod yang disediakan:
def a(self, name): print(name) 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
Fungsi lambda dalam untuk rujukan gelung pembolehubah nama yang sama, yang akan ditetapkan semula semasa setiap lelaran. Akibatnya, semua butang menggunakan fungsi yang sama dengan nilai terakhir yang diberikan kepada nama, membawa kepada tingkah laku yang salah.
Penyelesaian:
Untuk menyelesaikan isu ini, anda boleh mengikat nilai semasa pembolehubah nama pada hujah kata kunci lambda menggunakan parameter lalai:
user_button = Tkinter.Button(self.root, text=name, command=lambda name=name: self.a(name))
Secara lalai kata kunci argumen, fungsi lambda setiap butang mempunyai salinan unik pembolehubah nama, memastikan parameter yang betul digunakan apabila butang diklik.
Atas ialah kandungan terperinci Bagaimana untuk Mengelakkan Menetapkan Semula Perintah Butang dalam Tkinter Untuk Gelung Menggunakan Fungsi Lambda?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!