Bottom Page

Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
 Tkinter Generate/Delete Shapes with Keyboard Events
#1
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.
Quote
#2
show code
Quote
#3
(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()
Quote
#4
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()
Quote

Top Page

Possibly Related Threads...
Thread Author Replies Views Last Post
  [Tkinter] Tkinter delete combobox content and not the list LagratteCchouette 4 170 Dec-29-2019, 11:04 AM
Last Post: LagratteCchouette
  How to delete text from a tkinter Text widget? Tang 1 16,632 May-20-2018, 09:26 PM
Last Post: Larz60+
  How can I draw en color shapes on python? MBlastSt 2 2,196 Oct-09-2017, 01:42 PM
Last Post: ichabod801

Forum Jump:


Users browsing this thread: 1 Guest(s)