Rumah >pembangunan bahagian belakang >Tutorial Python >Mengapa Butang Tkinter Saya Melaksanakan Perintahnya pada Penciptaan Daripada Pada Klik?

Mengapa Butang Tkinter Saya Melaksanakan Perintahnya pada Penciptaan Daripada Pada Klik?

DDD
DDDasal
2024-12-23 09:46:10115semak imbas

Why Does My Tkinter Button Execute Its Command on Creation Instead of On Click?

Perlaksanaan Perintah Butang Semasa Penciptaan

Dalam Tkinter, apabila contoh Butang dimulakan dengan parameter arahan, fungsi yang berkaitan bertujuan untuk menjadi dilaksanakan apabila butang diklik. Walau bagaimanapun, dalam sesetengah kes, arahan itu boleh dilaksanakan serta-merta selepas penciptaan butang, bertentangan dengan kelakuan yang dijangkakan.

Analisis Contoh Kod

Pertimbangkan kod berikut:

from Tkinter import *

admin = Tk()
def button(an):
    print(an)
    print('het')

b = Button(admin, text='as', command=button('hey'))
b.pack()
mainloop()

Huraian Masalah

Apabila anda menjalankan ini kod, butang kelihatan tidak berfungsi dengan betul. Daripada melaksanakan fungsi butang apabila diklik, ia mencetak 'hey' dan 'het' serta-merta selepas penciptaan.

Penjelasan

Isunya terletak pada cara arahan parameter sedang dimulakan. Baris:

command=button('hey')

sedang menghantar hasil panggilan fungsi butang('hai') kepada parameter arahan. Ini bersamaan dengan:

result = button('hey')
command=result

Memandangkan fungsi butang('hai') dilaksanakan serta-merta dan mengembalikan hasilnya, arahan ditetapkan kepada hasil dan bukannya rujukan fungsi itu sendiri. Akibatnya, fungsi itu dilaksanakan serta-merta, bukannya apabila butang diklik.

Penyelesaian

Untuk menyelesaikan isu ini, anda mesti menghantar rujukan kepada butang berfungsi tanpa melaksanakannya. Untuk melakukan ini, hanya tinggalkan kurungan apabila memulakan parameter arahan:

command=button

Nota Tambahan

  • Adalah penting untuk memahami perbezaan antara menghantar fungsi merujuk dan melaksanakan fungsi.
  • Pertimbangkan untuk menggunakan fungsi lambda atau functools.partial untuk menyediakan parameter kepada fungsi panggil balik apabila perlu.
  • Rujuk tutorial zone.effbot.org tentang panggilan balik Tkinter untuk maklumat yang lebih terperinci.

Atas ialah kandungan terperinci Mengapa Butang Tkinter Saya Melaksanakan Perintahnya pada Penciptaan Daripada Pada Klik?. 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