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
Lepaskan: 2024-12-24 17:56:10
asal
168 orang telah melayarinya

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)
Salin selepas log masuk

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)
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan