更新标签会保留以前的文字

时间:2016-09-10 22:19:37

标签: python python-3.x tkinter event-handling label

在我制作的程序中,用户按下回车键,然后键入的文本将显示为程序中的标签。因此标签不断更新,然后写在下一行。问题是在文本框中,用户键入的前一行保留在那里,这意味着你必须手动删除文本框中的字符串以写入新行。我怎样才能让你开始使用已清除的文本框?此外,输入按钮工作,但似乎当我点击“返回”按钮时,它给我一个错误:

TypeError:evaluate()缺少1个必需的位置参数:'event'

以下是代码:

from tkinter import *

window = Tk()
window.geometry("200x300")

def evaluate(event):
    thetext = StringVar()
    labeloutput = Label(app, textvariable = thetext)
    n = e.get()
    thetext.set(n)
    labeloutput.grid()

app = Frame(window)
app.pack()

e = Entry(window)
e.pack()

b= Button(window, text="Return", command=evaluate)
b.pack()

window.bind("<Return>", evaluate)

mainloop()

1 个答案:

答案 0 :(得分:1)

由于您将evaluate绑定为回调并将其用作按钮命令,因此当您在按钮中使用它时,您必须使用lambda并将None传递给事件。由于绑定需要event参数,但是当你从按钮点击调用它时没有事件,所以只需传递None来消除错误。您可以执行entry.delete(0, 'end')

删除
from tkinter import *

window = Tk()
window.geometry("200x300")

def evaluate(event):
    thetext = StringVar()
    labeloutput = Label(app, textvariable = thetext)
    n = e.get()
    thetext.set(n)
    labeloutput.grid()
    e.delete(0, 'end') # Here we remove text inside the entry

app = Frame(window)
app.pack()

e = Entry(window)
e.pack()

b = Button(window, text="Return", command=lambda: evaluate(None)) # Here we have a lambda to pass None to the event
b.pack()

window.bind("<Return>", evaluate)

mainloop()

当然,如果你想阻止使用lambda,你必须创建一个处理键绑定的函数,以及一个单独按钮点击的函数。