Eu notei dois principais erros:
1 - como passar um callback para um botão:
Quando vc deseja passar um callback, como neste caso:
button = tkinter.Button(app,text = 'click',command = trocar_texto(novo))
você não pode chamar a função. Por exemplo, faz de conta que quando você clicar no botão vc quer que a função blah seja invocada:
def blah():
print "oi"
button = tkinter.Button(app,text = 'click', command=blah) # note que não é command=blah()O motivo é: você não quer chamar a função agora, mas sim passar a função como argumento para que ela seja chamada futuramente.
2 - Você está usando StringVar de forma errada
A idéia de usar uma StringVar é mudar dinamicamente o seu conteúdo sem ter que a cessar o Widget diretamente.
O que você tem que fazer é criar uma StringVar, setar o seu conteúdo e criar um botão/label/whatever passando essa StringVar como argumento. Quando você quiser mudar o texto do botão/label/whatever, vc modifica o conteúdo da StringVar.
Porém, quando for instanciar um Widget em Tkinter usando StringVar, você deve passa-la como textvariable, e não como text:
label = tkinter.Label(app, text=texto)
vira
label = tkinter.Label(app, textvariable=sv) # sv é sua instância de StringVar
Dá uma olhada no seu código com algumas modificações aqui:
https://gist.github.com/alvesjnr/5038127
--
Atenciosamente,
Antonio Ribeiro
Skype: alvesjnr