Signal‐Slot - TiViOpetus/Autolainaus GitHub Wiki
Pääohjelman signaalit ja slotit
Kun käyttöliittimän elementtiin kohdistuu käyttäjän toiminto (event), sille määritellään signaali, joka käynnisää halutun metodin. Näitä metodeja kutsutaan nimellä slot. Signaalin mukana lähetetään dataa, jonka määrä vaihtelee elementin ja tapahtuman mukaan. Tästä syystä signaali ei voi käynnistää suoraan metodia, jolle on määritelty argumentteja. Seurauksena on argumenttien määrää koskeva virheilmoitus.
# Signaalin määritys
self.ui.pushButton.clicked.connect(self.updateSomething('value1', value2))
...
def updateSomething(self, argument1, argument2)
Edellisen esimerkin koodi johtaa virhetilanteeseen.
Korjauksena voidaan käyttää joko erillistä välittäjämetodia (agent) tai anonyymifunktiota lambda
.
# Signaalin määritys
self.ui.pushButton.clicked.connect(self.agent)
...
def agent(self):
argument1 = 'value1'
argument2 = value2
self.updateSomething(argument1, argument2)
...
def updateSomething(self, argument1, argument2):
Runsas välittäjäfunktioiden määritteleminen saattaa hankaloittaa koodin lukemista, jolloin lambdan
käyttäminen vähentää tarvittavien metodien määrittelyitä:
self.ui.pushButton.clicked.connect(lambda: self.updateSomething('value1', value2))
...
def updateSomething(self, argument1, argument2):
Edellisessä esimerkissä anonyymifunktio lambda
toimii agenttina ja vastaanottaa signaalin lähettämän datan. Vastaanottamisen jälkeen se kutsuu varsinaista slot-metodia ja antaa sille sen vaatimat parametrit.