Rumah > pembangunan bahagian belakang > Tutorial Python > Bagaimana untuk Mengelakkan Isu Sambungan Isyarat Bergelung dalam PyQt4?

Bagaimana untuk Mengelakkan Isu Sambungan Isyarat Bergelung dalam PyQt4?

Linda Hamilton
Lepaskan: 2024-11-13 16:52:02
asal
485 orang telah melayarinya

How to Avoid Looped Signal Connection Issues in PyQt4?

Menyambungkan Slot dan Isyarat dalam PyQt4: Menyelesaikan Isu Sambungan Isyarat Bergelung

Apabila cuba menyambungkan isyarat dalam PyQt4 dalam satu gelung, ia adalah perkara biasa untuk menghadapi tingkah laku yang tidak dijangka seperti semua butang mencetak nilai yang sama. Isu ini berpunca daripada cara skop, carian nama dan fungsi penutupan dalam Python.

Dalam kod yang disediakan, fungsi lambda yang digunakan untuk menyambung butang tidak mempunyai pengikatan tersendiri untuk pembolehubah i, sebaliknya mencari nilainya dalam ruang nama kaedah __init__. Akibatnya, saya sentiasa menganggap nilai terakhir yang ditakrifkan dalam gelung, yang dalam kes ini ialah 9.

Untuk menyelesaikannya, Python menyediakan beberapa penyelesaian, termasuk:

Argumen Kata Kunci dengan Lalai Nilai:
Dengan menghantar i sebagai hujah kata kunci dengan nilai lalai, anda membuat pengikatan baharu dalam lambda fungsi:

self._numberButtons[i].clicked.connect(lambda checked, i=i: self._number(i))
Salin selepas log masuk

functools.partial:
Ini menyediakan pendekatan yang lebih ringkas dan boleh dibaca dengan membungkus panggilan fungsi dengan argumen yang diingini:

self._numberButtons[i].clicked.connect(partial(self._number, i))
Salin selepas log masuk

Menggunakan teknik ini memastikan pengikatan yang betul dalam setiap fungsi panggil balik butang, membolehkan setiap butang memaparkan nilai yang sepadan apabila diklik.

Atas ialah kandungan terperinci Bagaimana untuk Mengelakkan Isu Sambungan Isyarat Bergelung dalam PyQt4?. 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