单击按钮时删除焦点条目小部件



我在程序中添加了一个功能,在添加图像时,图像的路径将显示在条目小部件中。现在我想添加删除这些路径条目的可能性。单击条目时,它应该占据焦点。单击按钮应删除当前处于焦点中的条目。下面的代码似乎在"条目小部件焦点"部分失败,因为焦点始终停留在"txtImage1"条目上。任何帮助将不胜感激。

#Variables
Image1 = StringVar()
Image2 = StringVar()
Image3 = StringVar()
Image4 = StringVar()
#Image Path Entry Widgets
lblImage1 = Label(PictureFrame2, font=('Arial',12), text="Image 1", bg="#d9e1f1")
lblImage1.grid(row=2,column=0)
txtImage1 = Entry(PictureFrame2, font=('Arial',12), textvariable=Image1, bg="ghost white", width = 10)
txtImage1.grid(row=3,column=0)
lblImage2 = Label(PictureFrame2, font=('Arial',12), text="Image 2", bg="#d9e1f1")
lblImage2.grid(row=2,column=1)
txtImage2 = Entry(PictureFrame2, font=('Arial',12), textvariable=Image2, bg="ghost white", width = 10)
txtImage2.grid(row=3,column=1)
lblImage3 = Label(PictureFrame2, font=('Arial',12), text="Image 3", bg="#d9e1f1")
lblImage3.grid(row=2,column=2)
txtImage3 = Entry(PictureFrame2, font=('Arial',12), textvariable=Image3, bg="ghost white", width = 10)
txtImage3.grid(row=3,column=2)
lblImage4 = Label(PictureFrame2, font=('Arial',12), text="Image 4", bg="#d9e1f1")
lblImage4.grid(row=2,column=3)
txtImage4 = Entry(PictureFrame2, font=('Arial',12), textvariable=Image4, bg="ghost white", width = 10)
txtImage4.grid(row=3,column=3)
#Entry Widget Focus
def image1click(event):
txtImage1.focus_set()
txtImage1.bind("<Button-1>", image1click)
def image2click(event):
txtImage2.focus_set()
txtImage2.bind("<Button-1>", image2click)
def image3click(event):
txtImage3.focus_set()
txtImage3.bind("<Button-1>", image3click)
def image4click(event):
txtImage4.focus_set()
txtImage4.bind("<Button-1>", image4click)

#Delete Image on Focus
def Deleteimage():
messageDelete= tkinter.messagebox.askyesno ("","Do you want to delete this image?")
if messageDelete > 0:
try:
if txtImage1.focus_get():
Image1.set("")
else:
if txtImage2.focus_get():
Image2.set("")
else:
if txtImage3.focus_get():
Image3.set("")
else:
if txtImage4.focus_get():
Image4.set("") 
except Exception:
pass
#Delete Button
btnDeleteImage = Button(PictureFrame, text='Delete', font=('arial',12), height=1, width=12, bd=2, padx=13, command=Deleteimage)
btnDeleteImage.grid(row=1,column=1)
focus_get()

不返回布尔值,它返回具有焦点的实际小部件。txtImage1.focus_get()txtImage2.focus_get()等都将返回相同的内容:具有焦点的小部件。

你可以用这个替换整个if/else链(你可以使用任何小部件来代替txtImage1(:

widget = txtImage1.focus_get()
widget.delete(0, "end")

此外,无需在单击按钮时调用函数来设置焦点,这会自动发生。

最新更新