在Tkinter中设置输入框的默认值

5
我正在使用Python中的Tkinter创建一个用户输入框。我从这里获取了基本代码:http://www.python-course.eu/tkinter_entry_widgets.php 提供的内容为:
from tkinter import *

def show_entry_fields():
   print("First Name: %s\nLast Name: %s" % (e1.get(), e2.get()))

master = Tk()
Label(master, text="First Name").grid(row=0)
Label(master, text="Last Name").grid(row=1)

e1 = Entry(master)
e2 = Entry(master)

e1.grid(row=0, column=1)
e2.grid(row=1, column=1)

Button(master, text='Quit', command=master.quit).grid(row=3, column=0, sticky=W, pady=4)
Button(master, text='Show', command=show_entry_fields).grid(row=3, column=1, sticky=W, pady=4)

mainloop( )

我修改了它以适应我的需求。我的问题是在输入框中设置默认变量。
我已经搜索了很多地方,似乎一个常见的解决方法是使用 v = Tkinter.StringVar() 和 v.set("Default")。然而,我正在使用整数,所以我将其更改为:
v = Tkinter.IntVar()
e1 = Entry(master)
v.set(pd.value_counts(df['month'].values, sort=False)[1])

where

In [29]: pd.value_counts(df['month'].values, sort=False)[1]
Out[29]: 247

我的代码可以运行,但输入中没有默认值。

你还没有告诉任何一个 Entry 小部件去做或者监视任何事情,所以当然它们不会有任何反应。 - TigerhawkT3
@TigerhawkT3,没错,在问题得到回答后,我缺少了一个非常显然的修复。 - jenryb
3个回答

7
您可以使用 entry 控件的 insert 方法插入任意值:
value = pd.value_counts(df['month'].values, sort=False)[1]
e1.insert(0, value)

您还可以使用 textvariable 属性将 StringVarIntVar 的实例关联起来,尽管大多数情况下这只是创建了一个额外的对象需要跟踪。在两种情况下,都需要调用函数来设置和获取值,因此,在这种情况下,textvariable 不提供任何优势并需要额外的一行代码来创建变量。

v = IntVar()
e1 = Entry(master, text=v)
v.set(value)

4

在你的例子中,既然你正在创建IntVar(),你可以创建IntVar()并将其设置为输入框的text值(这样它就成为了默认值)。例如 -

from tkinter import *

def show_entry_fields():
   print("First Name: %s\nLast Name: %s" % (e1.get(), e2.get()))

master = Tk()
Label(master, text="First Name").grid(row=0)
Label(master, text="Last Name").grid(row=1)

v = IntVar()
e1 = Entry(master, text=v)
e2 = Entry(master)
v.set(100)

e1.grid(row=0, column=1)
e2.grid(row=1, column=1)

Button(master, text='Quit', command=master.quit).grid(row=3, column=0, 

sticky=W, pady=4)
Button(master, text='Show', command=show_entry_fields).grid(row=3, 

column=1, sticky=W, pady=4)

mainloop( )

上述代码针对条目e1设置默认值为100,如果需要,可以类似地为e2创建一个新的IntVar()。
如果需要字符串,你也可以查看StringVar。

添加文本 = v 修复了。非常感谢! - jenryb
@BryanOakley 谢谢,已经修改了。 - Anand S Kumar

2
我使用了insert方法来实现这种方式。
e1.insert(0, "a default value for e1")
e2.insert(0, "b default value for e2")

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接