Seite 1 von 1

Wert einer Variable mit onkeypress ändern

Verfasst: Sonntag 31. März 2019, 11:42
von Boggel
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

Re: Wert einer Variable mit onkeypress ändern

Verfasst: Sonntag 31. März 2019, 14:13
von ThomasL
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.

Re: Wert einer Variable mit onkeypress ändern

Verfasst: Sonntag 31. März 2019, 21:00
von Sirius3
@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.

Re: Wert einer Variable mit onkeypress ändern

Verfasst: Montag 1. April 2019, 06:05
von ThomasL
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.

Re: Wert einer Variable mit onkeypress ändern

Verfasst: Montag 1. April 2019, 09:50
von __blackjack__
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()

Re: Wert einer Variable mit onkeypress ändern

Verfasst: Montag 1. April 2019, 11:51
von ThomasL
__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.