Dalam Tkinter, mencipta butang dalam gelung boleh menjadi mudah. Walau bagaimanapun, menghantar hujah khusus kepada setiap arahan butang boleh menjadi rumit.
Pertimbangkan senario berikut di mana anda cuba mencipta tiga butang dengan tajuk "Permainan 1" kepada "Permainan 3." Anda berhasrat untuk menghantar nilai angka yang sepadan kepada hujah perintah supaya apabila butang ditekan, anda boleh mengenal pasti butang yang mencetuskan tindakan.
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)
Malangnya, kod ini tidak berfungsi seperti yang dimaksudkan. Apabila sebarang butang ditekan, nilai yang dicetak sentiasa 2, lelaran terakhir gelung. Masalah timbul kerana fungsi lambda menggunakan nilai i pada penghujung gelung, bukan nilainya pada penciptaan setiap butang.
Untuk menyelesaikan isu ini, anda perlu membuat penutupan di sekeliling arahan setiap butang. Ini boleh dicapai dengan menggunakan sintaks lambda i=i: self.open_this(i).
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)
Dengan pengubahsuaian ini, setiap arahan butang menangkap nilai khusus i pada masa ia dicipta. Apabila butang ditekan, penutupan memastikan bahawa nilai i yang betul dihantar ke fungsi open_this.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Melepasi Pembolehubah Gelung dengan Betul kepada Perintah Butang Tkinter?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!