Rumah > pembangunan bahagian belakang > Tutorial Python > Mengapakah Menggunakan Ungkapan Lambda untuk Menyambungkan Berbilang Butang ke Slot yang Sama dalam PyQt Membawa kepada Gelagat Tidak Dijangka?

Mengapakah Menggunakan Ungkapan Lambda untuk Menyambungkan Berbilang Butang ke Slot yang Sama dalam PyQt Membawa kepada Gelagat Tidak Dijangka?

Linda Hamilton
Lepaskan: 2024-11-08 13:22:02
asal
851 orang telah melayarinya

Why Does Using Lambda Expressions to Connect Multiple Buttons to the Same Slot in PyQt Lead to Unexpected Behavior?

Menggunakan Ungkapan Lambda untuk Menyambung Slot dalam PyQt

Dalam Qt, ungkapan lambda boleh digunakan untuk menyambung isyarat ke slot. Walau bagaimanapun, terdapat beberapa had pada pendekatan ini yang boleh membawa kepada tingkah laku yang tidak dijangka.

Masalah:

Apabila menyambungkan berbilang butang ke slot yang sama menggunakan ungkapan lambda, hanya sambungan terakhir berfungsi dengan betul. Khususnya, butang yang disambungkan secara manual melalui panggilan individu untuk menyambung() berjaya, manakala butang yang disambungkan dalam gelung menggunakan ungkapan lambda semuanya menghasilkan hasil yang tidak betul yang sama.

Analisis:

Isu timbul daripada fakta bahawa ungkapan lambda dinilai apabila isyarat dicetuskan dan nilai hujah pilihannya ditimpa oleh hujah isyarat. Dalam kes isyarat QPushButton.clicked, hujah ini mewakili keadaan butang.

Penyelesaian:

Untuk menyelesaikan masalah, ungkapan lambda harus diubah suai seperti berikut:

button.clicked.connect(lambda state, x=idx: self.button_pushed(x))
Salin selepas log masuk

Dengan menambah keadaan sebagai hujah pertama pada ungkapan lambda, ia boleh diabaikan sambil masih membenarkan nilai idx yang dimaksudkan dihantar ke slot.

Memahami Sambungan Ungkapan Lambda:

Apabila ungkapan lambda digunakan untuk menyambung isyarat, ia mencipta fungsi tanpa nama yang dinilai apabila isyarat dilepaskan. Parameter ungkapan lambda terikat pada hujah isyarat, dalam kes ini keadaan butang. Slot itu kemudiannya dipanggil dengan hasil ungkapan lambda sebagai hujahnya.

Atas ialah kandungan terperinci Mengapakah Menggunakan Ungkapan Lambda untuk Menyambungkan Berbilang Butang ke Slot yang Sama dalam PyQt Membawa kepada Gelagat Tidak Dijangka?. 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