Heim  >  Artikel  >  Backend-Entwicklung  >  Wie kann ich zusätzliche Argumente an Qt-Slots in PyQt übergeben?

Wie kann ich zusätzliche Argumente an Qt-Slots in PyQt übergeben?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-19 16:48:03163Durchsuche

How Can I Pass Extra Arguments to Qt Slots in PyQt?

Übergabe zusätzlicher Argumente über Qt-Slots

In PyQt-Anwendungen sind Slots Mitgliedsfunktionen, die aufgerufen werden, wenn ein Signal ausgegeben wird. Diese Signale können von verschiedenen Qt-Objekten, etwa Buttons oder Widgets, ausgesendet werden. Standardmäßig empfangen Slots die vom Signal übergebenen Parameter. Es ist jedoch auch möglich, zusätzliche Argumente an Slots zu übergeben.

Problem: Variable über Slots übergeben

Stellen Sie sich das folgende Szenario vor: Sie haben eine Funktion, die eine Variable namens DiffP definiert. Sie möchten diese Variable an einen Slot übergeben, der mit einem Schaltflächenklickereignis verbunden ist.

class MyWidget(QtWidgets.QWidget):
    def __init__(self):
        [...]
        self.button.clicked.connect(self.some_slot)

    def some_slot(self):
        # Here you want to access the 'DiffP' variable defined in another function

Lösung: Verwendung von Lambda-Funktionen

Eine Möglichkeit, zusätzliche Argumente über Slots zu übergeben, ist die Verwendung von Lambda Funktionen. Lambda-Funktionen sind anonyme Funktionen, die inline definiert werden können. Sie können eine Lambda-Funktion erstellen, die sowohl die Standard-Slot-Parameter als auch die zusätzlichen Argumente übernimmt, die Sie übergeben möchten.

class MyWidget(QtWidgets.QWidget):
    def __init__(self):
        [...]
        self.button.clicked.connect(lambda: self.some_slot("DiffP"))

    def some_slot(self, DiffP):
        # Here you can access the 'DiffP' variable

In diesem Beispiel nimmt die Lambda-Funktion das zusätzliche Argument DiffP und übergibt es an die some_slot-Funktion .

Lösung: Verwendung von functools.partial

Eine andere Möglichkeit, zusätzliche Argumente über Slots zu übergeben, ist die Verwendung der Funktion functools.partial. Die Teilfunktion erstellt eine neue Funktion, die teilweise mit einigen Argumenten angewendet wird. Mit „partial“ können Sie eine Funktion erstellen, die nur die Standard-Slot-Parameter akzeptiert, und die zusätzlichen Argumente als gebundene Argumente übergeben.

from functools import partial

class MyWidget(QtWidgets.QWidget):
    def __init__(self):
        [...]
        self.button.clicked.connect(partial(self.some_slot, "DiffP"))

    def some_slot(self, DiffP):
        # Here you can access the 'DiffP' variable

In diesem Beispiel erstellt die Funktion „partial“ eine neue Funktion, die nur den Parameter „button_or_id“ akzeptiert und bindet das DiffP-Argument daran. Wenn der Slot aufgerufen wird, wird die neue Funktion mit den richtigen Argumenten aufgerufen.

Das obige ist der detaillierte Inhalt vonWie kann ich zusätzliche Argumente an Qt-Slots in PyQt übergeben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn