首页 > 解决方案 > 在按钮单击时删除焦点条目小部件

问题描述

我在我的程序中添加了一个功能,在添加图像时,图像的路径将显示在条目小部件中。现在我想添加删除这些路径条目的可能性。单击条目时,它应该获得焦点。然后单击按钮应删除当前处于焦点的条目。下面的代码似乎在“Entry Widget Focus”部分失败,因为焦点始终停留在“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)

标签: pythontkinter

解决方案


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

您可以用这个替换整个 if/else 链(并且您可以使用任何小部件代替txtImage1):

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

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


推荐阅读