簡體   English   中英

在tkinter 8.5和python 3.3中遇到ttk.Entry.selection_present()和ttk.Entry.selection_clear()的問題

[英]Trouble with ttk.Entry.selection_present() and ttk.Entry.selection_clear() in tkinter 8.5 and 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_clear()我的期望。 entry.selection_present()始終輸出0, entry.selection_clear()似乎什么也不做。

如果將if塊更改為:我可以使我的代碼工作:

if entry.get() != "":
    entry.delete(0,1000)

但這似乎有點駭人聽聞,因為參數-刪除最多1000個字符-是任意的。 我真正想要的是清除整個先前的文件選擇。

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

使用END (或'end')表示條目的結尾。

entry.delete(0, END)

以上聲明將刪除條目內容。 (從開始(0)到結束)。


另外,您可以將條目與StringVar對象綁定,然后再調用set('')清除內容。

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

# to clear
v.set('')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM