Pyqt5-sporet eksempel

Pyqt5-sporet eksempel h1>

Fa via App Store Les dette innlegget i var app!

PyQt5 signal-slot dekorator eksempel.

Jeg er for tiden i ferd med a lage en klasse som produserer en pyqtSignal (int) og pyqtSlot (int). Sv rheten ligger i a skape et signal som gir en bestemt verdi.

Anta at jeg vil produsere noe som ligner pa folgende enkle eksempel:

Mitt forste sporsmal til koden ovenfor er:

Hvorfor bruke pyqtSlot () dekoratoren i det hele tatt nar du fjerner pyqtSlot (int), har ingen effekt pa koden? Kan du gi et eksempel pa nar det ville v re nodvendig?

Av spesielle grunner vil jeg gjerne produsere mitt eget signal ved hjelp av pyqtSignal () fabrikken og far anstendig dokumentasjon her. Det eneste problemet er imidlertid at det sv rt enkle eksempelet ikke gir et solid grunnlag for hvordan du sender ut bestemte signaler.

Her er det jeg prover a gjore, men har funnet meg selv tapt:

Opprett en metaklass som muliggjor implementering av mange forskjellige typer QWidget-underklasser. Har metaklassen produsere sitt eget signal som kan kalles fra utenfor klassen.

Dette er hva jeg skal til:

Som du kan se. Jeg gir widgeten et navn fordi jeg synes dette er nyttig, og jeg prover ogsa a instansere QWidget fra klassen for a forenkle koden.

Slik onsker jeg en hovedklass til a produsere widgets fra det forste eksemplet:

Det er bare 2 problemer som ma loses her:

Malen metaklasse er satt opp feil, og jeg kan ikke instantiere QWidget fra metaklassen. Q_Type forteller meg at dens type er PyQt5.QtCore.pyqtWrapperType nar det skal v re PyQt5.QtWidgets.QSlider. Selv om jeg lager en nySignal via den templerte klassen, hvordan far jeg QSlider til a sende den endrede verdien som jeg vil at den skal sende. Jeg tror dette er hvor utslipp () kommer inn i spill, men har ikke nok kunnskap om hvordan det er nyttig. Jeg vet at jeg kunne lage en slags funksjonsanrop self.sld.emit (35) hvis jeg vil at signalet skal passere verdien 35 til sporet-funksjonen. Sporsmalet blir ikke hvordan men hvor skal jeg implementere denne funksjonen?

Jeg kan v re helt offbase og overthinking losningen, v r sa snill a korrigere koden min, slik at jeg kan fa signalet mitt til a gi ut gliderenes verdi.

Hvorfor bruke pyqtSlot () dekoratoren i det hele tatt nar du fjerner pyqtSlot (int), har ingen effekt pa koden? Kan du gi et eksempel pa nar det ville v re nodvendig?

Redigert allerede i ditt forrige sporsmal, men jeg vil gjenta det igjen.

Selv om PyQt4 tillater at Python kalles til a bli brukt som spor ved tilkobling av signaler, er det noen ganger nodvendig a markere en Python-metode eksplisitt som en Qt-spor og for a gi en C ++-signatur for den. PyQt4 gir funksjonen dekorator pyqtSlot () for a gjore dette.

Koble et signal til en dekorert Python-metode har ogsa fordelen av a redusere mengden minne som brukes og er litt raskere.

Ogsa, som adressert i ditt forrige sporsmal, kan du ikke opprette signaler som forekomstvariabler, de ma v re klasseattributter.

Dette vil aldri fungere.

Opprett en metaklass som muliggjor implementering av mange forskjellige typer QWidget-underklasser.

Du kan ikke definere en metaklass for QObjects, siden de allerede bruker sin egen metaklasse (dette gjor det mulig for signalet magi a fungere). Du kan imidlertid fortsatt lage en QObject-underklassefabrikk ved hjelp av typen-funksjonen.

Har metaklassen produsere sitt eget signal som kan kalles fra utenfor klassen.

Kort sagt, ikke gjor dette. Du bor ikke sende ut signaler fra utenfor klassen. Fabrikkeksemplet ovenfor er ikke veldig nyttig, fordi du ikke definerer egendefinerte metoder pa disse klassene for a avgi disse signalene. Vanligvis er det slik du vil bruke tilpassede signaler.


Vil du spille i det beste kasinoet? Vi fant det for deg. Trykk her nå!