[Python-de] Numpy-Array aus TkInter-Entrys belegen

Jan Harnisch jan.willi at bnhof.de
Do Dez 15 00:43:56 CET 2011


Hallo Peter,

und danke für die schnelle Antwort!


> entry_val = [DoubleVar(), DoubleVar()]

Ahaa, eine Liste... das hilft schon mal sehr. Ich hatte angenommen, hier 
gehen tatsächlich nur "normale" Variablen.

> Mir ist kein Trick bekannt, wie sich numpy-Arrayeinträge automatisch mit
> Tkinter-Entries verknüpfen lassen. Dazu müsste numpy.array das Observer-
> Pattern implementeren, was die Effizienz einer numbercrunching-Bibliothek
> wohl ruinieren würde.

In dem Fall verzichte ich darauf. Performance ist einer der Hauptgründe, 
weshalb ich überhaupt zu Python gegangen bin und ist -wenn überhaupt- 
nur durch noch mehr Performance zu ersetzen :-)

> Was an einer Schleife so unelegant sein soll, kann ich aber nicht
> nachvollziehen.

Naja, man braucht halt außer dem Array-Element noch eine zweite 
Variable, um denselben Wert aufzunehmen. Aber wenn man das mit einer 
Liste erschlagen kann, anstatt mit diversen Einzelvariablen rumhantieren 
zu müssen, dann bin ich ja schon glücklich.

> Unter Verwendung von numpy sähe add() so aus:
>
> def add():
>      a = array([v.get() for v in entry_val])
>      print a.sum()

Ja; so unelegant ist das wirklich nicht...

> 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).

> 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ß

Jan


Mehr Informationen über die Mailingliste python-de