Rumah >pembangunan bahagian belakang >Tutorial Python >Mengapa Parameter \'Arahan\' dalam Butang Tkinter Dilaksanakan Selepas Pengisytiharan?
Dalam tkinter, parameter "perintah" widget Butang bertujuan untuk melaksanakan panggilan balik apabila butang itu ditekan. Walau bagaimanapun, adalah membingungkan mengapa fungsi panggil balik dilaksanakan serta-merta selepas pengisytiharan, berbanding apabila butang diklik.
Kuncinya terletak pada penilaian parameter semasa pembuatan contoh. Apabila menghantar fungsi sebagai parameter "perintah", Python terlebih dahulu menilai fungsi itu, memanggilnya dengan sebarang argumen yang diluluskan dalam kurungan. Contohnya, dalam kod berikut:
<code class="python">def Hello(): print("Hi there!") hi = Button(frame, text="Hello", command=Hello())</code>
Kod memanggil fungsi Hello, mengembalikan nilai None kerana ketiadaan penyataan pulangan dan menghantar nilai None ini sebagai parameter "perintah" kepada butang. Akibatnya, panggilan balik tidak dilaksanakan apabila butang diklik dan penilaian awal mencetak "Hai!".
Untuk membetulkan isu ini dan memastikan panggilan balik dilaksanakan hanya apabila butang diklik, lulus fungsi itu sendiri, tanpa kurungan:
<code class="python">hi = Button(frame, text="Hello", command=Hello)</code>
Pengubahsuaian ini mengekalkan fungsi Hello sebagai objek boleh panggil, yang akan digunakan apabila klik butang.
Memahami perbezaan asas antara objek fungsi dan nilai pulangannya adalah penting dalam konteks ini. Objek fungsi dirujuk oleh nama_fungsi, manakala nama_fungsi() mewakili nilai pulangan. Walaupun yang pertama boleh dipanggil, yang kedua adalah hasil daripada memanggil fungsi.
Pada dasarnya, apabila menentukan parameter "perintah" Butang, adalah penting untuk lulus objek fungsi, bukan nilai pulangannya, untuk mengelakkan pramatang perlaksanaan. Perbezaan ini membuka jalan untuk kefungsian panggil balik yang lancar apabila butang diklik.
Atas ialah kandungan terperinci Mengapa Parameter 'Arahan' dalam Butang Tkinter Dilaksanakan Selepas Pengisytiharan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!