Dalam Tkinter, mencipta berbilang butang dalam satu gelung boleh berguna untuk menjana antara muka pengguna yang dinamik. Walau bagaimanapun, menghantar argumen arahan kepada butang boleh menimbulkan cabaran, terutamanya apabila cuba membezakan butang yang ditekan.
Pertimbangkan kod berikut, di mana butang dicipta dengan tajuknya ditambah dengan pembilang gelung:
def createGameURLs(self): self.button = [] for i in range(3): self.button.append(Button(self, text='Game '+str(i+1), command=lambda: self.open_this(i))) self.button[i].grid(column=4, row=i+1, sticky=W) def open_this(self, myNum): print(myNum)
Isu ini timbul apabila kami cuba mencetak pengecam butang (myNum) apabila mengklik mana-mana daripadanya. Output secara konsisten memaparkan 2, nilai lelaran terakhir. Tingkah laku ini menunjukkan bahawa butang pada asasnya tidak dapat dibezakan walaupun tajuknya unik.
Untuk menyelesaikan isu ini, kita perlu memastikan bahawa setiap butang menangkap nilai tersendiri i di masa penciptaan. Untuk mencapai matlamat ini, kita boleh menggunakan teknik pintar dengan fungsi lambda:
def createGameURLs(self): self.button = [] for i in range(3): self.button.append(Button(self, text='Game '+str(i+1), command=lambda i=i: self.open_this(i))) self.button[i].grid(column=4, row=i+1, sticky=W) def open_this(self, myNum): print(myNum)
Dengan menambahkan tugasan i=i dalam fungsi lambda, kami secara berkesan "membekukan" nilai semasa i pada masa lambda ditakrifkan. Ini memastikan setiap butang mengekalkan pengecam uniknya walaupun selepas gelung selesai.
Teknik ini membolehkan kami mencipta berbilang butang Tkinter secara dinamik dalam gelung, di mana setiap butang boleh dikenal pasti secara unik apabila diklik. Dengan memahami gelagat fungsi dan penutupan lambda, kami boleh mencapai lebih kawalan dan fleksibiliti dalam aplikasi Tkinter kami.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Meluluskan Hujah Unik kepada Berbilang Butang Tkinter Dicipta dalam Gelung?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!