One way is to use signals.
Here is an example:
- Create a new scene, with the following node hierarchy:
Root node (Control, Node etc)
|_ TextEdit
|_ Label
- Attach a blank script to any of the three nodes
- Select the TextEdit node, go to the "Node" tab near the "Inspector", and double click the "text_changed" signal
- Select the node which the script was attached in the "Connect to Node" tree
- Click on "Connect"
- Implement the binding function, something along these lines (the exact approach may change depending on the node you attached the script, in my case it was the root node):
func _on_TextEdit_text_changed():
var lab = get_node("Label")
var edit = get_node("TextEdit")
lab.set_text(edit.get_text())
This will keep the label content synchronized with the typed text.