Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimanakah Saya Boleh Melepasi Pembolehubah Gelung dengan Betul kepada Perintah Butang Tkinter?

Bagaimanakah Saya Boleh Melepasi Pembolehubah Gelung dengan Betul kepada Perintah Butang Tkinter?

Linda Hamilton
Linda Hamiltonasal
2024-12-24 17:56:10179semak imbas

How Can I Pass Loop Variables Correctly to Tkinter Button Commands?

Melalukan Pembolehubah Gelung kepada Perintah Butang Tkinter

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.

Keajaiban Penutupan

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!

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