Seite 2 von 2
Verfasst: Dienstag 10. November 2009, 10:03
von wuf
Hallo bb21
Danke für deine Nachricht auf meine Forum-Mailbox. Da sich die Bedienung der Forum-Mailbox von meinem System aus komisch verhält und ich nicht sicher bin ob meine Antwort auf deine Forum-Mailbox übermittelt wurde sende ich meine Antwort zusätzlich hier. So wie ich dich verstanden habe möchtest du die Entry-Ausgabe noch auf die Konsole umgeleitet haben weil im Tkinter-Fenster sie bei jeder Neu-Ausgabe überschrieben wird. Hier wäre das modifizierte Skript:
http://paste.pocoo.org/show/149754/
Hoffe dir hiermit geholfen zu haben. Bachte die zusätzliche Funktion 'neu_entry_ausgabe'.
Gruss wuf

Verfasst: Dienstag 10. November 2009, 11:10
von bb21
Hallo wuf!
Das Problem ist leider das meine Version ja zu alt ist und ich das enumarate nicht benutzen kann. Habe mal ne Vorlage gefunden, die bei mir funktioniert, welche aber dann den wert immer überschreibt in der for-scheife und dieses soll eben nicht passieren.
Code: Alles auswählen
from Tkinter import *
var = 'A', 'B', 'C', 'D'
def fetch(entries):
for entry in entries:
print 'Input => "%s"' % entry.get()
def makeform(root, var):
entries = []
for field in var:
row = Frame(root)
lab = Label(row, width=5, text=field)
ent = Entry(row)
row.pack(side=TOP, fill=X)
lab.pack(side=LEFT)
ent.pack(side=RIGHT, expand=YES, fill=X)
entries.append(ent)
return entries
def show(entries):
fetch(entries)
popup.destroy()
def ask():
global popup
popup = Toplevel()
ents = makeform(popup, var)
Button(popup, text='OK', command=(lambda e=ents: show(e)) ).pack()
popup.grab_set()
popup.focus_set()
popup.wait_window()
root = Tk()
Button(root, text='Eingabe', command=ask).pack()
root.mainloop()
bei mir ist eben das problem in der funktion:
Code: Alles auswählen
def fetch(entries):
for entry in entries:
print 'Input => "%s"' % entry.get()
ich weiß einfach nicht wie ich das erweitern kann. habe es auch mal mit den vorschlägen hier probiert aber irgendwie meckert er immer rum.
grüße
Verfasst: Dienstag 10. November 2009, 11:40
von Leonidas
Der Code ist nicht in Code-Tags, daher komplett wertlos...
Verfasst: Dienstag 10. November 2009, 12:04
von bb21
sorry, habe eben erst rausgefunden wie ich das mache

Verfasst: Dienstag 10. November 2009, 12:17
von wuf
Hallo bb21
Wenn ich dein Skript ausführe zeigt es folgendes Verhalten.
Als erstes gibt es das Fenster mit der Schaltfläche 'Eingabe':
Beim betätigen der Schaltfäche 'Eingabe' erscheint folgender Eingabe-Dialog mit leeren Eingabefeldern:
Was meinst du jetzt genau mit überschreiben? Möchtest du das die im Eingabe-Dialog vorhandenen leeren Eingabefelder mit den Daten aus der Liste:
gefüllt werden? Wenn dann der Eingabe-Dialog mit der Schaltfläche 'OK' geschlossen wird die Inhalte der Eingabefelder auf die Konsole ausgegeben werden. Bin leider ein bisschen schwer von Begriff. Vielleicht kannst du dies noch genauer beschreiben.
Könntest du evt. den Python-Code des Skriptes in deinem Post wie Leonidas vorschlägt mit Python-Tags versehen? Damit er ohne abzuändern kopiert und ausgeführt werden kann.
Gruss wuf

Verfasst: Dienstag 10. November 2009, 12:49
von bb21
habe mich vielleicht auch sehr unverständlich ausgedrückt, das glaube ich mal eher
also... nachdem ich "ok" drücke schreibt er mir es ja in die konsole, was auch richtig ist, aber ich will jetzt nicht das er mir z.b. input = a, input =b usw ausgibt.
mein gedanke und ziel ist es das er mir schreibt input 1 =a, input 2 = b, so ne art zähler da mit dran, so das er mir den alten Wert nicht überschreibt.
hoffe das mit dem python-tags ist jetzt richtig?!
Verfasst: Dienstag 10. November 2009, 14:13
von numerix
Verstehe ich das richtig: Dein Problem ist, dass du beim Iterieren über die Liste einen Zähler mitlaufen lassen willst, aber aufgeschmissen bist, weil deine alte Python-Version kein enumerate kennt?
Falls dem so ist:
1. hat yipyip dazu zwei Lösungen angeboten; hat er leider nicht dick daneben geschrieben ...
2. wenn du das nicht selbst auf die Reihe bekommst, indem du einfach über die Liste iterierst und explizit einen zusätzlichen Zähler mitführst, dann solltest du dir das Tutorial noch einmal ganz gründlich und in Ruhe zu Gemüte führen.
Verfasst: Dienstag 10. November 2009, 14:37
von yipyip
Nach (sehr!) langen Ueberlegungen, was Du wohl mit "Ueberschreiben" meinen koenntest, denke ich, dass Du wohl Probleme hast, die Eingaben aus den Entry-Widgets zu verwalten.
Dafuer gibt es:
http://effbot.org/tkinterbook/variable.htm
Dies sollte Dir weiterhelfen:
Code: Alles auswählen
import Tkinter as tk
class Gui(object):
def __init__(self, *items):
self.root = tk.Tk()
self.form_frame = self.make_form(self.root, items)
self.form_frame.pack()
self.ok_but = tk.Button(self.root, text='OK', command=self.show)
self.ok_but.pack()
self.outtext = tk.StringVar()
self.outlabel = tk.Label(self.root, textvariable=self.outtext)
self.outlabel.pack()
self.show_label()
def make_form(self, parent, items):
frame = tk.Frame(parent)
self.labels = [tk.Label(frame, width=5, text=var) for var in items]
self.svars = [tk.StringVar() for _ in items]
self.entries = [tk.Entry(frame, textvariable=svar) for svar in self.svars]
for i, (lab, entry) in zip(xrange(len(items)), zip(self.labels, self.entries)):
lab.grid(row=i, column=0)
entry.grid(row=i, column=1)
return frame
def show(self):
for i, var in zip(xrange(len(self.svars)), self.svars):
print "Input %s => %s" % (i, var.get())
self.show_label()
def show_label(self):
self.outtext.set("-".join(var.get() for var in self.svars))
def run(self):
self.root.mainloop()
if __name__ == '__main__':
Gui("A", "B", "C", "D").run()
yipyip
Verfasst: Dienstag 10. November 2009, 17:52
von wuf
Hallo bb21
Wenn es dir genügt die Entries nummeriert auf die Konsole auszugeben reicht auch die folgende Anpassung in deinem Code aus:
Code: Alles auswählen
def fetch(entries):
var_ptr = 0
for entry in entries:
print "Input %s => %s" % (var_ptr, entry.get())
var_ptr += 1
Oder auf deine Variable-Namen bezogen:
Code: Alles auswählen
def fetch(entries):
var_ptr = 0
for entry in entries:
print "Input %s => %s" % (var[var_ptr], entry.get())
var_ptr += 1
Gruss wuf

Verfasst: Mittwoch 11. November 2009, 08:49
von bb21
Dank an alle die mir geholfen haben, es funktioniert jetzt.
Großer Dank noch an wuf!
Grüße...