tkinter 8.5和python 3.3中的ttk.Entry.selection_present()和ttk.Entry.selection_clear()出现问题

时间:2014-07-17 14:43:36

标签: python python-3.x tkinter python-3.3

我需要entry一次只包含一个文件选择。就目前而言,如果用户多次点击button来选择多个文件(比如他们最初选择了错误的文件或他们改变了主意),entry将这些多个文件名连接在一起。基本上,我希望entry仅包含用户的最后一个文件选择。

示例代码:

from tkinter import *
from tkinter import ttk
from tkinter import filedialog

def browse():
    if entry.selection_present() == 1:
        entry.selection_clear()
    entry.insert(0, filedialog.askopenfilename(parent=frame))

root = Tk()

frame = ttk.Frame(root)
frame.pack()
entry = ttk.Entry(frame, width=100)
entry.pack()
button = ttk.Button(frame, text="Browse", command=browse)
button.pack()

root.mainloop()

entry.selection_present()entry.selection_clear()都没有达到我的期望。 entry.selection_present()始终输出0,而entry.selection_clear()似乎什么都不做。

如果我将if块更改为:

,我就可以使用我的代码
if entry.get() != "":
    entry.delete(0,1000)

但这似乎有点hackish,因为参数 - 删除所有高达1000的字符 - 是任意的。我真正想要的是清除以前的整个文件选择。

Tkinter 8.5文档:https://www.tcl.tk/man/tcl8.5/TkCmd/ttk_entry.htm#M23

1 个答案:

答案 0 :(得分:1)

使用END(或“结束”)表示条目的结束。

entry.delete(0, END)

上述声明将删除条目内容。 (从开始(0)到结束)。


或者,您可以使用StringVar对象绑定条目,稍后调用set('')来清除内容。

v = StringVar()
entry = Entry(master, textvariable=v)

# to clear
v.set('')