Hallo.
a) Muss es root heißen? Nein, es bietet sich nur an.
b) Unterstrich: Hier nicht. Man spart sich lediglich einen Namen auszudenken, da ein solcher hier nicht gebracht wird.
c) Zum Rest: Probiere die Sachen doch mal im interaktiven Iterpreter aus und lese ein wenig in der Dokumentation. Das sind alles keine Dinge, die man nicht innerhalb von 30 Minuten selber rausfinden kann.
Sebastian
Mehrere entry-widgets gleichzeitig konfigurieren
Zum 1. Ich denke das hat keinen tieferen Sinn
2. Es muss nicht root heißen
3. Unterstriche verwendet man, wenn man die Variable (Bezeichner) nicht braucht
4. Ich hoffe der Code hilft5. Den Lambdaausdruck kannst du mit vergleichen
//Edit schon wieder zu langsam
2. Es muss nicht root heißen
3. Unterstriche verwendet man, wenn man die Variable (Bezeichner) nicht braucht
4. Ich hoffe der Code hilft
Code: Alles auswählen
>>> zip([1,2,3,4], [5,6,7,8])
[(1, 5), (2, 6), (3, 7), (4, 8)]
>>> for i, b in enumerate(['a', 'b', 'c']):
print 'n-ter Buchstabe:', i
print 'Buchstabe:', b
n-ter Buchstabe: 0
Buchstabe: a
n-ter Buchstabe: 1
Buchstabe: b
n-ter Buchstabe: 2
Buchstabe: c
Code: Alles auswählen
def enter_value(event):
entry_obj = event.widget
print(entry_obj.get())
//Edit schon wieder zu langsam
the more they change the more they stay the same
Danke euch beiden!
Ich versuche nun das ganze nochmal in Worten auszudrücken, um zu sehen, ob ich es verstanden habe:
1) Ich könnte statt "root" auch "Fernseher" benutzen, wenn ich Lust darauf hätte
2) Statt einem Unterstrich (_) könnte ich auch ein anderes Zeichen verwenden (bspw. ein "w")
3) zip nimmt als Argumente Listen entgegen und gibt dann eine neue Liste aus. Die neue Liste enthält Tupel und in jedem Tupel befindet sich das n-te Objekt der einzelnen (alten) Listen.
4) enumerate zählt letzendlich bloß durch
5) Der lambda-Ausdruck sorgt bei einem bestimmten Event (hier Enter-Taste) dafür, dass der Inhalt des Entry-Feldes ausgegeben wird.
Alles richtig verstanden?
Ich versuche nun das ganze nochmal in Worten auszudrücken, um zu sehen, ob ich es verstanden habe:
1) Ich könnte statt "root" auch "Fernseher" benutzen, wenn ich Lust darauf hätte
2) Statt einem Unterstrich (_) könnte ich auch ein anderes Zeichen verwenden (bspw. ein "w")
3) zip nimmt als Argumente Listen entgegen und gibt dann eine neue Liste aus. Die neue Liste enthält Tupel und in jedem Tupel befindet sich das n-te Objekt der einzelnen (alten) Listen.
4) enumerate zählt letzendlich bloß durch
5) Der lambda-Ausdruck sorgt bei einem bestimmten Event (hier Enter-Taste) dafür, dass der Inhalt des Entry-Feldes ausgegeben wird.
Alles richtig verstanden?
Fast alles, in diesem Fall ruft der Lambdaausdruck nur die Funktion doit mit einem bestimmten Parameter auf, wenn man statt dem Lambdaasudruck nur seld.doit schreibt, wird self.doit() mit dem Eventparameter der von tkinter kommt aufgerufen
the more they change the more they stay the same
Hallo!
1) Ja, du kannst Namen beliebig wählen, so lange sie nicht mit einem reservierten Wort kollidieren (wie "for", "if", ...). Außerdem solltest du keine buil-in-Namen verdecken ("list", "dict", "set", ...)
2) Ja, jeden zulässigen Namen
3) Fast richtig: es können nicht nur Listen entgegengenommen werden, sonder alles über das iteriert werden kann. Schau dir auch noch den Sonderfall an, wenn nicht alle Listen die selbe Länge haben
4) Mal etwas anders ausgedrück: enumerate liefert zu jedem Wert noch seinen Index (den Start kann man beliebig einstellen). Auch hier kann wieder alles übergeben werden, über das auch iteriert werden kann
5) Das ist das, was am Schluß rauskommt. Ein lambda-Ausdruck ist eigentlich eine anonyme Funktion. Also eine Funktion ohne Namen. Jeden lambda-Ausdruck kannst du also auch in eine Funktion übersetzen:
@yipyip: Das geht aber noch ein wenig schöner. Mal ein Vorschlag:
1) Ja, du kannst Namen beliebig wählen, so lange sie nicht mit einem reservierten Wort kollidieren (wie "for", "if", ...). Außerdem solltest du keine buil-in-Namen verdecken ("list", "dict", "set", ...)
2) Ja, jeden zulässigen Namen
3) Fast richtig: es können nicht nur Listen entgegengenommen werden, sonder alles über das iteriert werden kann. Schau dir auch noch den Sonderfall an, wenn nicht alle Listen die selbe Länge haben
4) Mal etwas anders ausgedrück: enumerate liefert zu jedem Wert noch seinen Index (den Start kann man beliebig einstellen). Auch hier kann wieder alles übergeben werden, über das auch iteriert werden kann
5) Das ist das, was am Schluß rauskommt. Ein lambda-Ausdruck ist eigentlich eine anonyme Funktion. Also eine Funktion ohne Namen. Jeden lambda-Ausdruck kannst du also auch in eine Funktion übersetzen:
Code: Alles auswählen
lambda x : x = 2*x
def function(x):
return 2*x
Code: Alles auswählen
import Tkinter as tk
MAXI = 11
class Entries(object):
def __init__(self, names, **keys):
self.root = tk.Tk()
for row, name in enumerate(names):
var = tk.StringVar()
entry = tk.Entry(self.root, textvariable=var, **keys)
label = tk.Label(self.root, text=name)
label.grid(column=0, row=row)
entry.grid(column=1, row=row)
entry.bind('<Return>', lambda e, v=var: self.doit(e, v.get()))
def doit(self, event, var):
print var
def run(self):
self.root.mainloop()
if __name__ == '__main__':
Entries(map('Text{0:02d}'.format, range(MAXI)), width=20).run()
Das Leben ist wie ein Tennisball.
@ Dav1d: Nun warst du der schnellste
OK, dann habe ich wohl bis jetzt wieder Wissenslücken geschlossen und werde weiter machen, bis ich dann irgendwann wieder auf ein wohl unlösbares Problem finde, bei dem ihr mir dann (hoffentlich) auch wieder helfen könnt.
Danke an alle!!
edit: Doch nicht: Was bedeutet: Text{0:02d}
Habs ausprobiert, bin aber nicht drauf gekommen
OK, dann habe ich wohl bis jetzt wieder Wissenslücken geschlossen und werde weiter machen, bis ich dann irgendwann wieder auf ein wohl unlösbares Problem finde, bei dem ihr mir dann (hoffentlich) auch wieder helfen könnt.
Danke an alle!!
edit: Doch nicht: Was bedeutet: Text{0:02d}
Habs ausprobiert, bin aber nicht drauf gekommen
Zuletzt geändert von heiliga horsd am Samstag 6. Februar 2010, 19:08, insgesamt 1-mal geändert.
Bin wie immer der langsamste...
Mein Ansatz ruehrt daher, weil ich die Widgetlisten als Objektattribute beibehalten wollte, bei groeseren Programmen braucht man die meistens noch. Dafuer hat EyDu alles in einem Rutsch in einer for-Schleife erledigt mit lokalen Variablen erledigt. Sieht fuer diesen Fall etwas eleganter aus.
yipyip
Mein Ansatz ruehrt daher, weil ich die Widgetlisten als Objektattribute beibehalten wollte, bei groeseren Programmen braucht man die meistens noch. Dafuer hat EyDu alles in einem Rutsch in einer for-Schleife erledigt mit lokalen Variablen erledigt. Sieht fuer diesen Fall etwas eleganter aus.
yipyip
@heiliga horsd:
Diese relativ neue format-Syntax ist auch fuer mich etwas ungewohnt.
Also http://docs.python.org/library/string.h ... ing-syntax lesen und ausprobieren:
yipyip
Diese relativ neue format-Syntax ist auch fuer mich etwas ungewohnt.
Also http://docs.python.org/library/string.h ... ing-syntax lesen und ausprobieren:
Code: Alles auswählen
In [60]: "t{0} t{1:02d}".format(1,2)
Out[60]: 't1 t02'
In [61]: "t{0} t{1:x}".format(1,15)
Out[61]: 't1 tf'
In [62]: map("t{0:d}".format, range(4))
Out[62]: ['t0', 't1', 't2', 't3']
yipyip