Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimanakah Saya Boleh Melepasi Hujah Tambahan Melalui Isyarat dalam PyQt?
PyQt menyediakan pelbagai isyarat dan mekanisme slot untuk komunikasi antara objek. Isyarat dipancarkan untuk memberitahu pendengar tentang peristiwa, manakala slot ialah kaedah yang dilaksanakan apabila isyarat diterima. Satu kes penggunaan biasa ialah menghantar data daripada isyarat ke slot. Walau bagaimanapun, bagaimana jika anda ingin menghantar data tambahan bersama-sama dengan isyarat? Dalam artikel ini, kami akan meneroka cara untuk menghantar argumen tambahan melalui isyarat menggunakan fungsi lambda dan functools.partial.
Dalam Python, fungsi lambda ialah fungsi tanpa nama yang boleh ditakrifkan sebaris. Mereka menyediakan cara yang mudah untuk menyampaikan hujah tambahan kepada slot tanpa mengubah takrifan slot. Sintaksnya adalah seperti berikut:
signal.connect(lambda param1, param2, ..., arg1=val1, arg2=value2, ... : fun(param1, param2,... , arg1, arg2, ....))
di mana:
Sebagai contoh, pertimbangkan perkara berikut kod:
def addLineEdit(self): self.buttonGroup.buttonClicked['int'].connect(lambda i: self.input(i, "text")) @pyqtSlot(int) def input(self, button_or_id, DiffP): if isinstance(button_or_id, int): if button_or_id == 0: self.TotalInput[0].setText(DiffP) elif button_or_id == 1: self.TotalInput[54].setText('1')
Dalam contoh ini, isyarat butang Diklik disambungkan ke slot (input) menggunakan fungsi lambda yang melepasi argumen tambahan "teks". Slot input kemudian menggunakan argumen DiffP untuk mengubah suai widget TotalInput.
Satu lagi pendekatan untuk menghantar argumen tambahan melalui isyarat ialah menggunakan functools.partial. Fungsi ini mencipta fungsi baharu yang mempunyai subset argumen bagi fungsi asal yang telah diisi. Sintaksnya adalah seperti berikut:
signal.connect(partial(fun, args1, arg2, ... ))
di mana:
Sebagai contoh, pertimbangkan kod berikut:
from functools import partial self.buttonGroup.buttonClicked['int'].connect(partial(self.input, "text")) @pyqtSlot(int) def input(self, DiffP, button_or_id): if isinstance(button_or_id, int): if button_or_id == 0: self.TotalInput[0].setText(DiffP) elif button_or_id == 1: self.TotalInput[54].setText('1')
Dalam contoh ini, functools.partial digunakan untuk mencipta fungsi baharu yang sudah mempunyai hujah "teks" terikat . Apabila isyarat Diklik butang dipancarkan, slot input dipanggil dengan argumen DiffP dan argumen "teks" yang diluluskan sebelum ini.
Melalukan argumen tambahan melalui isyarat boleh menjadi teknik yang berguna dalam PyQt pembangunan. Ia membolehkan anda memindahkan data tambahan bersama-sama dengan isyarat, memperkayakan komunikasi antara objek. Dengan memahami penggunaan fungsi lambda dan functools.partial, anda boleh memanfaatkan ciri ini dengan berkesan dalam aplikasi PyQt anda.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Melepasi Hujah Tambahan Melalui Isyarat dalam PyQt?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!