[Python-de] Numpy-Array aus TkInter-Entrys belegen
Peter Otten
__peter__ at web.de
Do Dez 15 17:48:42 CET 2011
Jan Harnisch wrote:
> Hallo Peter,
>
> und danke für die schnelle Antwort!
Bitte!
>> Um die Werte in das GUI zurückzuschreiben:
>>
>> for v, x in zip(entry_val, a):
>> v.set(a)
> ^^^^^^^^
> (fürs Archiv: das hier muss v.set(x) heißen).
Oops.
>> Beantwortet das deine Frage? Falls nicht, erläutere bitte nochmal
>> genauer, wo numpy ins Spiel kommt.
>
> Vielen Dank; du hast mir perfekt weitergeholfen.
> Vielleicht doch noch ein paar Worte zum Hintergrund der Sache: Letztlich
> geht es hier um eine Strömungsberechnung. Ich habe einen in momentan 16
> Abschnitte unterteilten Strömungskanal, der von seiner Grundgeometrie
> her immer ähnlich aussieht. Einige Abmessungen jedes Abschnitts sollen
> vom Benutzer vorgegeben werden (dafür die Entrys), und in Abhängigkeit
> davon werden dann ein paar andere Abmessungen optimiert.
> Da ich die Optimierungsergebnisse auf die Konsole ausgeben kann, muss
> ich nicht mal unbedingt was ins GUI zurückschreiben. Ist aber trotzdem
> schön und bringt natürlich zusätzlichen Komfort.
> Nochmal danke und schönen Gruß
Ich hab noch was Interessantes gefunden, sogenannte "ufunc"s, und in dein
Beispielprogramm eingebaut:
from numpy import *
from Tkinter import *
root = Tk()
setvalues = frompyfunc(lambda var, value: var.set(value), 2, 1)
getvalues = frompyfunc(lambda var: var.get(), 1, 1)
def add_up():
total = getvalues(entry_val).sum()
print total
def add_one():
a = getvalues(entry_val)
print "vorher", a
setvalues(entry_val, a + 1)
print "nachher", getvalues(entry_val)
Label(root, text="Summand1").grid(row=0, sticky=E)
Label(root, text="Summand2").grid(row=1, sticky=E)
entry_val = [DoubleVar(), DoubleVar()]
setvalues(entry_val, 42)
Entry(root, textvariable=entry_val[0]).grid(row=0, column=1)
Entry(root, textvariable=entry_val[1]).grid(row=1, column=1)
Button(root, text="Summe", command=add_up).grid(row=2, sticky=W)
Button(root, text="1 addieren", command=add_one).grid(row=3, sticky=W)
root.mainloop()
Mehr Informationen über die Mailingliste python-de