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.