Wert einer Variable mit onkeypress ändern

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Boggel
User
Beiträge: 23
Registriert: Samstag 15. Dezember 2018, 12:56

Hallo,

kann man den Wert einer Variable mit onkeypress ändern?
Also das man zum Beispiel q drückt und dann hat i den Wert 1.
Habt ihr irgendwelche ideen?

Mfg Boggel
Benutzeravatar
ThomasL
User
Beiträge: 1378
Registriert: Montag 14. Mai 2018, 14:44
Wohnort: Kreis Unna NRW

Wenn ich mir das hier anschaue https://docs.python.org/3.5/library/tur ... onkeypress
ginge das wohl nur durch Verwendung von global in der übergebenen Funktion und das empfiehlt hier eigentlich niemand.
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Sirius3
User
Beiträge: 18266
Registriert: Sonntag 21. Oktober 2012, 17:20

@ThomasL: bei onkeypress wird ein Funktionsobjekt übergeben, das man wie bei allen anderen Event-basierten Programmierungen per partial oder Klassenmethoden mit Parametern anreichern kann. Aber bei Turtle gibt es sowieso viel globalen Zustand.
Benutzeravatar
ThomasL
User
Beiträge: 1378
Registriert: Montag 14. Mai 2018, 14:44
Wohnort: Kreis Unna NRW

Sirius3 hat geschrieben: Sonntag 31. März 2019, 21:00 @ThomasL: bei onkeypress wird ein Funktionsobjekt übergeben, das man wie bei allen anderen Event-basierten Programmierungen per partial oder Klassenmethoden mit Parametern anreichern kann.
Könntest du mir dazu, wenn Zeit und Lust, dazu ein Beispiel geben, das ist ein Bereich mit dem ich mich noch gar nicht beschäftigt habe. Danke dir vorab.
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Benutzeravatar
__blackjack__
User
Beiträge: 14032
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Na ganz normal OOP halt:

Code: Alles auswählen

#!/usr/bin/env python3
from functools import partial
from turtle import Screen


class App:
    
    def __init__(self, screen):
        self.screen = screen
        self.flag = False
        self.screen.onkeypress(partial(self.set_flag, True), 'a')
        self.screen.onkeyrelease(partial(self.set_flag, False), 'a')
        self.screen.onkey(self.screen.bye, 'q')
        self.screen.listen()
    
    def set_flag(self, value):
        print(f'Setting `flag` to {value}.')
        self.flag = value


def main():
    screen = Screen()
    _app = App(screen)
    screen.mainloop()


if __name__ == '__main__':
    main()
„A life is like a garden. Perfect moments can be had, but not preserved, except in memory. LLAP” — Leonard Nimoy's last tweet.
Benutzeravatar
ThomasL
User
Beiträge: 1378
Registriert: Montag 14. Mai 2018, 14:44
Wohnort: Kreis Unna NRW

__blackjack__ hat geschrieben: Montag 1. April 2019, 09:50

Code: Alles auswählen

#!/usr/bin/env python3
from functools import partial
        self.screen.onkeypress(partial(self.set_flag, True), 'a')
        self.screen.onkeyrelease(partial(self.set_flag, False), 'a')
Danke dir, functools.partial war das was mir nicht geläufig war. Lerne jeden Tag.
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Antworten