2015-05-15 3 views
0

Как получить вход из виджета Entry и установить его как текст в виде ярлыка.Как получить ввод из Entry и установить его как текст в ярлыке

Я попытался следующие:

l_one = Label(window, text= lambda: self.entry_1.get()) 
l_one.grid(column = 0, row = 0) 

Честно говоря, я не думаю, что это будет работать, но это было все, что я мог придумать.

ответ

2

Если вы хотите ярлык иметь именно то, что был вход в Входе виджете, вы можете иметь их одни и то же значение для атрибута textvariable:

theVariable = tk.StringVar() 
tk.Entry(..., textvariable=theVariable) 
tk.Label(..., textvariable=theVariable) 

С, что вы не должны делать ничего другого - никаких обратных вызовов, никаких привязок, никаких кнопок. Всякий раз, когда вы вводите виджет ввода, метка будет автоматически обновляться.

1

Примером может служить следующее:

def callback(*args): 
     lbl = Label(root,text=e.get(), width=20).grid(row=1, column=1)  

myLabel = Label(window, text='Reflecting Entry text here...', width=20) 
myLabel.grid(row=1, column=1) 

e = StringVar() 

myEntry = Entry(root, width = 20, textvariable = e) 
myEntry.grid(row=1, column=2) 

e.set("Type Something here..") 
e.trace("w", callback) 

Это обновит текст по Label «s мгновенно, что вы печатаете в Entry виджете.

+0

Что делает e.trace ("w", callback)? Я получаю обратный вызов ошибки не определен? –

+0

К сожалению, забыли включить функцию обратного вызова –

0

Я привязал функцию обратного вызова в каждом событии нажатия клавиши. Внутри функции обратного вызова текущее содержимое метки добавляется при нажатии последней нажатой клавиши.

Единственная проблема заключается в том, когда вы нажимаете backspace, символ возврата также печатается, а удаление еще не выполняется. Другое обратное нажатие приведет к удалению символа перед напечатанным символом обратного пробела. И так далее.

Таким образом, удаление всех элементов из виджета ввода оставляет символ пробела. Я оставлю это вам.

Другим решением является использование кнопки, после чего каждый щелчок на кнопке обновит вашу метку. Но я думаю, что вы хотите автоматическое обновление каждый раз при нажатии клавиши.

Итак, я создал сценарий, который соответствует вашим требованиям.

Вот рабочий сценарий:

#!/usr/bin/env python3 
from tkinter import * 
from tkinter import ttk 

window = Tk() 

entry_1 = Entry(window, width=45) 
entry_1.grid(column = 0, row = 0) 

# appends current content of l_one with the new pressed key value 
def callback(event): 
    l_one.config(text=entry_1.get() + event.char) 

# binds callback to every keypress 
entry_1.bind("<Key>", callback) 

l_one = Label(window) 
l_one.grid(column = 0, row = 1) 

window.mainloop() 

Успехов!