【问题标题】:Insert text to Tkinter Entry after clearing the widget清除小部件后将文本插入 Tkinter 条目
【发布时间】:2021-01-10 02:04:47
【问题描述】:

我想在我的应用程序中添加一个 Entry 小部件,这样当我使用退格按钮清除它时,它会自动插入另一个文本,例如占位符...

我已经创建了以下函数来创建前面所述的占位符,但我还想在用户清除 Entry 小部件后立即添加该占位符文本。这可能吗?

def placeholder(entry, case: str):
    placeholder = f'type the {case} number...'

    def focusIn():
        if entry.get() == placeholder:
            entry.delete(0, tk.END)
            entry.config({'foreground': 'Black'})
    def focusOut():
        if entry.get() == '':
            entry.insert(0, placeholder)
            if entry.get() == placeholder:
                entry.config({'foreground': 'Grey'})

    if entry.get() == '':
        entry.insert(0, placeholder)
        if entry.get() == placeholder:
            entry.config({'foreground': 'Grey'})

    entry.bind('<FocusIn>', lambda event: focusIn())
    entry.bind('<FocusOut>', lambda event: focusOut())

【问题讨论】:

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


    【解决方案1】:

    我认为为此您最好使用验证函数而不是绑定事件。这是一个粗略的大纲:

    import tkinter as tk
    
    def placeholder(data, event, widget):
        if event == 'key' and data == '':
            print(f'{widget}: user has cleared all data')
        if event == 'key' and data != '':
            print(f'{widget}: user has typed something')
        if event == 'focusout':
            print(f'{widget}: user has left')
        if event == 'focusin':
            print(f'{widget}: user has joined')
        return True # critical!!
    
    root = tk.Tk()
    vcmd = root.register(placeholder), '%P', '%V', '%W'
    for i in range(1,5):
        ent = tk.Entry(root, validate="all", validatecommand=vcmd)
        ent.pack()
    root.mainloop()
    

    【讨论】:

    • 你能解释一下吗?我不能轻易得到它......
    • 解释验证是如何工作的?我不知道如何比我的例子更好地解释它。你有一个具体的问题吗?文档在这里:tcl.tk/man/tcl8.4/TkCmd/entry.htm#M13
    • 我正在阅读文档,但似乎无法获取小部件本身,只有它的名称......我想删除/插入作为参数传递给小部件的数据占位符函数...你知道怎么做吗?不接受使用widget.insert() 或widget.delete(),因为它不是小部件对象,而是它的名称。
    猜你喜欢
    • 2014-10-06
    • 1970-01-01
    • 1970-01-01
    • 2020-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多