Mencipta Butang Secara Program dalam tkinter dengan Argumen Perintah Unik
Tugas yang ada ialah menjana beberapa butang dalam antara muka tkinter menggunakan gelung for . Setiap butang harus mengandungi hujah perintah unik yang mewakili kiraan lelaran semasa. Walau bagaimanapun, kod sedia ada menghasilkan butang dengan nilai cetakan yang konsisten, menunjukkan kemungkinan isu dengan penugasan hujah perintah.
Isu: Menghilang Nilai Lelaran
Kod yang disediakan mencipta butang dengan tajuk daripada "Permainan 1" hingga "Permainan 3." Apabila mengklik mana-mana butang ini, nilai yang dicetak sentiasa 2, sepadan dengan kiraan lelaran terakhir. Ini menunjukkan bahawa argumen perintah dianggap sebagai satu entiti, dan bukannya dikaitkan dengan setiap butang individu.
Penyelesaian: Mengekalkan Nilai Lelaran
Kunci kepada menyelesaikan isu ini terletak pada mengekalkan nilai lelaran semasa (i) apabila menentukan arahan untuk setiap butang. Untuk mencapai matlamat ini, ungkapan lambda yang diubah suai diperlukan:
command=lambda i=i: self.open_this(i)
Ungkapan lambda ini memberikan nilai semasa i kepada pembolehubah bernama i. Ini memastikan bahawa nilai i ditangkap dan dilampirkan pada butang tertentu pada masa penciptaan. Akibatnya, setiap butang akan mempunyai akses kepada kiraan lelaran uniknya.
Memahami Penutupan Lambda
Dengan menggunakan i=i, penutupan menyimpan nilai semasa i pada masa lambda ditakrifkan, dan bukannya bergantung pada nilai i pada masa fungsi dipanggil. Ini mengekalkan maklumat yang diperlukan untuk setiap butang.
Kod Tetap
Dengan pengubahsuaian yang dinyatakan di atas, kod yang diperbetulkan muncul seperti berikut:
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)
Sekarang, apabila mengklik mana-mana butang, kiraan lelaran yang sepadan akan dicetak dengan tepat, menyelesaikan isu.
Atas ialah kandungan terperinci Bagaimana untuk Menghantar Hujah Unik kepada Perintah dalam Gelung Butang Tkinter?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!