Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimana untuk Mengelakkan Tingkah Laku Tidak Dijangka Apabila Mengikat Perintah pada Butang Dicipta dalam Gelung Tkinter?

Bagaimana untuk Mengelakkan Tingkah Laku Tidak Dijangka Apabila Mengikat Perintah pada Butang Dicipta dalam Gelung Tkinter?

Linda Hamilton
Linda Hamiltonasal
2024-12-20 00:51:11360semak imbas

How to Avoid Unexpected Behavior When Binding Commands to Buttons Created in a Tkinter Loop?

Penciptaan Butang Gelung Tkinter dengan Pengikatan Argumen Perintah

Dalam Tkinter, mencipta butang dalam gelung untuk boleh memberikan cabaran apabila cuba mengikat setiap arahan butang dengan hujah yang unik.

Pertimbangkan perkara berikut senario:

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)

Apabila melaksanakan kod ini, anda mungkin menghadapi gelagat pelik di mana menekan sebarang butang sentiasa mencetak nilai yang sama, biasanya nilai lelaran terakhir. Ini berlaku kerana setiap fungsi lambda yang dicipta dalam gelung merujuk pembolehubah i yang sama, yang dikemas kini dalam setiap lelaran gelung.

Penyelesaian: Menggunakan Penutupan

Untuk menangani isu ini, anda boleh memanfaatkan penutupan Python dengan memberikan i kepada pembolehubah baharu dalam fungsi lambda, dengan berkesan mencipta skop unik untuk setiap butang. Berikut ialah kod yang diubah suai:

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 memasukkan penutupan, setiap fungsi lambda menangkap nilai semasa i pada masa definisi, memastikan kelakuan butang yang betul.

Atas ialah kandungan terperinci Bagaimana untuk Mengelakkan Tingkah Laku Tidak Dijangka Apabila Mengikat Perintah pada Butang Dicipta dalam Gelung Tkinter?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn