ThreeF.

Signaler og spor i PySide.

Denne siden beskriver bruk av signaler og spor i PySide. Hovedvekten er a illustrere bruken av sakalte nystilte signaler og spor, selv om den tradisjonelle syntaksen ogsa er gitt som referanse.

PyQts nye signaler og spor ble introdusert i PyQt v4.5. Hovedmalet med denne nye stilen er a gi en mer pythonisk syntaks til Python programmerere. PySide bruker PSEP 100 [pyside.org] som implementeringsretningslinje.

Tradisjonell syntaks: SIGNAL og SLOT.

QtCore. SIGNAL og QtCore. SLOT-makroer tillater Python a grensesnittet med Qt-signal og sporlevering mekanismer. Dette er den gamle maten a bruke signaler og spor pa.

Eksempelet nedenfor bruker det velkjente klikkede signalet fra en QPushButton. Tilkoblingsmetoden har en ikke-python-vennlig syntaks. Det er nodvendig a informere objektet, dets signal (via makro) og et spor som skal kobles til.

Ny syntaks: Signal () og Slot ()

Ny stil bruker en annen syntaks for a lage og koble til signaler og spor. Det forrige eksempelet kunne omskrives som:

Bruke QtCore.Signal ()

Signaler kan defineres ved hjelp av QtCore.Signal () klassen. Python typer og C typer kan sendes som parametere til den. Hvis du trenger a overbelaste det, bare passere typene som tuples eller lister.

I tillegg til det kan det ogsa motta et navngitt argumentnavn som definerer signalnavnet. Hvis ingenting er bestatt som navn, vil det nye signalet ha samme navn som variabelen som den blir tildelt.

Eksempler-delen nedenfor har en samling av eksempler pa bruk av QtCore.Signal ().

Merk: Signaler skal bare defineres innenfor klasser som arver fra QObject. Pa denne maten blir signalinformasjonen lagt til klassen QMetaObject-strukturen.

Bruke QtCore.Slot ()

Slots er tildelt og overbelastet ved hjelp av dekoratoren QtCore.Slot (). Igjen, for a definere en signatur bare passere typene som QtCore.Signal () klassen. I motsetning til Signal () klassen, for a overbelaste en funksjon, gar du ikke over hver variant som tuple eller liste. I stedet ma du definere en ny dekorator for hver annen signatur. Eksempler-delen nedenfor vil gjore det tydeligere.

En annen forskjell handler om sokeordene sine. Slot () aksepterer et navn og et resultat. Resultatet sokeord definerer typen som vil bli returnert og kan v re en C eller Python type. Navnet oppforer seg pa samme mate som i Signal (). Hvis ingenting er bestatt som navn, vil det nye sporet ha samme navn som funksjonen som blir dekorert.

Eksemplene nedenfor illustrerer hvordan du definerer og kobler signaler og spor i PySide. Bade grunnleggende tilkoblinger og mer komplekse eksempler er gitt.

Hei Verdenseksempel: Det grunnleggende eksempelet, som viser hvordan du kobler et signal til et spor uten noen parametere.

Deretter blir noen argumenter lagt til. Dette er en endret Hello World-versjon. Noen argumenter legges til sporet og et nytt signal blir opprettet.

Legg til noen overbelastninger. En liten modifikasjon av det forrige eksempelet, na med overbelastede dekoratorer.

Et eksempel med sporoverbelastning og mer kompliserte signalforbindelser og utslipp:

Et eksempel pa en objektmetode som sender et signal:

Signaler er runtime objekter eid av forekomster, de er ikke klassen attributter:

PyQt-kompatibilitet.

PyQt bruker en annen navngivningskonvensjon til sine nye signal / sporfunksjoner. For a konvertere et PyQt-skript som bruker denne nye stilen til a kjore med PySide, bruk bare en av de foreslatte endringene nedenfor:

Pa denne maten blir alle anrop til pyqtSignal eller pyqtSlot oversatt til et signal- eller spilleautomat.


Vil du spille i det mest ærlige kasinoet? Vi forbereder det for deg. Prøv her nå!