Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimana untuk Menghantar Argumen Tambahan ke Slot Qt Menggunakan Fungsi Lambda atau functools.partial?

Bagaimana untuk Menghantar Argumen Tambahan ke Slot Qt Menggunakan Fungsi Lambda atau functools.partial?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-19 10:17:02585semak imbas

How to Pass Extra Arguments to Qt Slots Using Lambda Functions or functools.partial?

Melalui Argumen Tambahan melalui Sambung

Apabila menyambungkan slot dalam aplikasi Qt, mungkin terdapat keperluan untuk menghantar argumen tambahan kepada fungsi slot. Ini boleh dilakukan dalam dua cara: menggunakan fungsi lambda atau functools.partial.

Menggunakan Fungsi Lambda

Fungsi Lambda membolehkan anda menghantar argumen tambahan sebagai argumen kata kunci apabila menyambung isyarat ke slot. Berikut ialah sintaks umum:

connect(lambda param1, param2, ..., arg1=val1, arg2=value2, ... : fun(param1, param2,... , arg1, arg2, ....))

Di mana:

  • param1, param2, ...: Parameter yang diterima oleh isyarat
  • arg1, arg2, ...: Parameter tambahan diserahkan kepada fungsi slot

Dalam kes anda, kod itu akan be:

self.buttonGroup.buttonClicked['int'].connect(lambda i: self.input(i, "text"))

@pyqtSlot(int)
def input(self, button_or_id, DiffP):
    # Use the extra argument `DiffP` in the slot function
    ...

Menggunakan Functools.Partial

Functools.partial menyediakan kaedah lain untuk menghantar argumen tambahan kepada fungsi slot. Ia mencipta fungsi baharu yang terikat pada hujah yang ditentukan. Sintaks umum ialah:

partial(fun, args1, arg2, ... )

Di mana:

  • seronok: Fungsi slot sasaran
  • args1, arg2, ...: Argumen tambahan diserahkan kepada yang baharu fungsi

Begini cara anda menggunakannya dalam kod anda:

from functools import partial

...

self.buttonGroup.buttonClicked['int'].connect(partial(self.input, "text"))

@pyqtSlot(int)
def input(self, DiffP, button_or_id):
    # `DiffP` will be passed as the first argument to the slot function
    ...

Atas ialah kandungan terperinci Bagaimana untuk Menghantar Argumen Tambahan ke Slot Qt Menggunakan Fungsi Lambda atau functools.partial?. 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