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
Linda Hamiltonasal
2024-11-13 16:52:02486semak imbas

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))

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))

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!

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