【问题标题】:Reset Tkinter Widget to its default value将 Tkinter 小部件重置为其默认值
【发布时间】:2015-06-10 21:52:07
【问题描述】:

需要创建一个通用函数,在事件发生时它将聚焦的小部件返回到其默认值。有没有办法做到这一点?

例子:

entry1 = Tkinter.Entry()
entry1.grid(..)
entry1.insert(0,"hello")
entry1.bind("<FocusIn>", EntryFocusedIn)
entry1.bind("<FocusOut>", EntryFocusedOut)

entry2 = Tkinter.Entry()
entry2.grid(..)
entry2.insert(0,"again")
entry2.bind("<FocusIn>", EntryFocusedIn)
entry2.bind("<FocusOut>", EntryFocusedOut)  

def EntryFocusedIn(params):
     params.widget.delete(0, Tkinter.END)

def EntryFocusedOut(params):
     # return widget to its default value
     # which in case of entry1 its "hello"
     # and in case of entry2 its "again"

【问题讨论】:

  • 它应该如何知道您认为 "默认值" 是什么?我建议您使用例如自定义 Entry 子类用于此目的的 default_value 属性。
  • 这是个好主意,我希望已经有一个内置函数用于条目的默认(初始)值,即在构建时设置的值。
  • 不,就Entry 而言,该值没有什么特别之处。
  • 明白,谢谢。

标签: python tkinter


【解决方案1】:

您可以子类化Entry 小部件以添加一个属性来存储默认值,并在事件处理程序中引用该属性。但是,没有什么能阻止您直接将自己的属性添加到每个 Entry 小部件,例如entry1.default_value = 'hello'entry1.default_value = 'again'

import Tkinter

def EntryFocusedIn(params):
    params.widget.delete(0, Tkinter.END)

def EntryFocusedOut(params):
    # restore default value
    params.widget.delete(0, Tkinter.END)
    params.widget.insert(0, params.widget.default_value)

root = Tkinter.Tk()

entry1 = Tkinter.Entry()
entry1.default_value = 'hello'
entry1.pack()
entry1.insert(0, entry1.default_value)
entry1.bind("<FocusIn>", EntryFocusedIn)
entry1.bind("<FocusOut>", EntryFocusedOut)

entry2 = Tkinter.Entry()
entry2.default_value = 'again'
entry2.pack()
entry2.insert(0, entry2.default_value)
entry2.bind("<FocusIn>", EntryFocusedIn)
entry2.bind("<FocusOut>", EntryFocusedOut)

root.mainloop()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-06
    • 2020-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多