Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimana untuk Menyambungkan Slot dengan betul dengan Fungsi Lambda dalam PyQt?

Bagaimana untuk Menyambungkan Slot dengan betul dengan Fungsi Lambda dalam PyQt?

Linda Hamilton
Linda Hamiltonasal
2024-11-09 02:10:02454semak imbas

How to Correctly Connect Slots with Lambda Functions in PyQt?

Menyambungkan Slot dengan Fungsi Lambda dalam PyQt

Apabila cuba menyambungkan slot dengan fungsi lambda, adalah penting untuk memahami cara hujah dikendalikan. Dalam contoh kod yang disediakan, isu timbul apabila menyambungkan berbilang butang dalam satu gelung.

Dalam dua butang pertama, ungkapan lambda ditakrifkan dan disambungkan dengan betul:

button_1.clicked.connect(lambda x:self.button_pushed(1))
button_2.clicked.connect(lambda x:self.button_pushed(2))

Untuk butang disambungkan dalam gelung, masalahnya terletak pada ungkapan lambda:

button.clicked.connect(lambda x=idx: self.button_pushed(x))

Dalam kes ini, isyarat QPushButton.clicked mengeluarkan hujah yang menunjukkan keadaan butang. Walau bagaimanapun, apabila menyambung ke slot lambda, idx argumen pilihan ditimpa oleh keadaan butang.

Untuk menyelesaikannya, sambungan hendaklah ditakrifkan seperti berikut:

button.clicked.connect(lambda state, x=idx: self.button_pushed(x))

Ini mengabaikan keadaan butang dan hantar nilai yang betul kepada kaedah button_pushed.

Ringkasnya, adalah penting untuk mengambil kira hujah yang dihantar kepada fungsi lambda semasa menyambungkan slot. Dengan mengendalikan hujah isyarat yang dipancarkan dengan betul, anda boleh memastikan bahawa nilai yang betul dihantar kepada kaedah anda.

Atas ialah kandungan terperinci Bagaimana untuk Menyambungkan Slot dengan betul dengan Fungsi Lambda dalam PyQt?. 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