Mengapa Perlaksanaan Segera Perintah Butang Apabila Dibuat?
Dalam Tkinter, memberikan arahan kepada butang boleh membawa kepada tingkah laku yang tidak dijangka di mana arahan itu dilaksanakan serta-merta selepas penciptaan butang, bukan apabila ia diklik. Ini adalah kerana cara pilihan arahan berfungsi.
Apabila anda menentukan parameter arahan sebagai Button(... command=button('hey')), anda sebenarnya menghantar hasil panggilan butang(' hey') kepada pilihan arahan. Ini bermakna fungsi butang dilaksanakan serta-merta, dan nilai yang dikembalikan diberikan kepada parameter arahan.
Penyelesaian: Menghantar Rujukan kepada Fungsi
Untuk mengelakkan ini isu, anda perlu memberikan rujukan kepada fungsi dan bukannya melaksanakannya dengan segera. Ini boleh dilakukan menggunakan fungsi lambda, functools.partial atau fungsi perantaraan.
Menggunakan Fungsi Lambda
Fungsi Lambda menyediakan cara mudah untuk mencipta fungsi tanpa nama yang boleh dijadikan rujukan. Contohnya:
b = Button(... command=lambda: button('hey'))
Fungsi lambda ini mencipta fungsi tanpa nama yang, apabila dipanggil, melaksanakan fungsi butang dengan hujah 'hai'. Rujukan ini kemudiannya boleh dihantar ke parameter arahan butang.
Pendekatan Alternatif
Kesimpulan
Dengan menghantar rujukan kepada fungsi dan bukannya melaksanakannya serta-merta, anda boleh memastikan bahawa arahan butang dilaksanakan hanya apabila butang diklik, seperti yang dimaksudkan.
Atas ialah kandungan terperinci Mengapa Butang Tkinter Saya Melaksanakan Perintahnya Serta-merta Daripada On Click?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!