I finally sussed it! Here's the code I ended up with ...
frame = TkFrame.new(@canvas)
labelText = TkVariable.new(nodeLabel.Text())
label = TkLabel.new(frame, 'textvariable' => labelText,
"foreground" => @LABELCOLOUR)
label.pack
x = node.X + nodeLabel.DeltaX()
y = node.Y + nodeLabel.DeltaY()
frame.place "in" => @canvas, "x" => x, "y" => y
That calculation of x and y is so that I can move the entire graph and
keep each label relative to the graph node it's associated with.
I might end up writing a small document about my learning process once
I have the program finished, to help reduce the next person's learning
curve.
Thanks to everyone who made suggestions.