Python Forum
Tkinter Generate/Delete Shapes with Keyboard Events - Printable Version

+- Python Forum (https://python-forum.io)
+-- Forum: Python Coding (https://python-forum.io/forum-7.html)
+--- Forum: GUI (https://python-forum.io/forum-10.html)
+--- Thread: Tkinter Generate/Delete Shapes with Keyboard Events (/thread-20513.html)



Tkinter Generate/Delete Shapes with Keyboard Events - baseball2201 - Aug-15-2019

Hey all,

Brand new to Tkinter. I'm trying to create random shapes with keyboard presses (keydown), and then delete them when the key is let go (keyup). I've been struggling with doing this, how should I go about it (either a high-level view or example code)? Ideally, the user will be pressing a lot of buttons in rapid succession, so I'd also like to be able to account for multiple shapes being displayed/removed at the same/close to the same time.

I've tried using pack.forget(), .after(), and a few other functions but no success. I've also tried Googling a lot and wasn't able to find anything.


RE: Tkinter Generate/Delete Shapes with Keyboard Events - Larz60+ - Aug-15-2019

show code


RE: Tkinter Generate/Delete Shapes with Keyboard Events - baseball2201 - Aug-15-2019

(Aug-15-2019, 11:05 AM)Larz60+ Wrote: show code

Here's a part - I'm having issues with what I commented out. I notice that this stops the terminal from continuing to read input, which I don't want at all. I want input to constantly get processed and not wait for one task to get done to move on, as the user will be pressing these keys frequently. I also am not sure how to simulate a keydown/keyup in here and would prefer that for getting the shape to appear/disappear rather than to use a regular timer for making the shape disappear.

import tkinter as tk

def enter_pressed(event):
	print("Key pressed: ENTER")
	box = c.create_rectangle(50, 50, 100, 100, fill="red")
	# root.after(3000, c.delete(box))

def space_pressed(event):
	print("Key pressed: SPACE")

def main():
	root.bind("<Return>", enter_pressed)
	root.bind("<space>", space_pressed)

	root.mainloop()

root = tk.Tk()
root.title("My app")
root.geometry('500x500')
c = tk.Canvas(root, height=500, width=500, bg="blue")
c.pack()

main()



RE: Tkinter Generate/Delete Shapes with Keyboard Events - Larz60+ - Aug-16-2019

Use a lambda statement, after needs to a function
import tkinter as tk


def enter_pressed(event):
    print("Key pressed: ENTER")
    box = c.create_rectangle(50, 50, 100, 100, fill="red")
    root.after(3000, lambda: c.delete(box))
 
def space_pressed(event):
    print("Key pressed: SPACE")
 
def main():
    root.bind("<Return>", enter_pressed)
    root.bind("<space>", space_pressed)
 
    root.mainloop()

if __name__ == '__main__':
    root = tk.Tk()
    root.title("My app")
    root.geometry('500x500')
    c = tk.Canvas(root, height=500, width=500, bg="blue")
    c.pack()
    
    main()