Seite 1 von 2
Eingabe im Fenster
Verfasst: Dienstag 3. November 2009, 08:24
von bb21
Hallo!
Ich bin neu hier und hätte mal eine Frage an euch. Ich programmiere noch nicht lange mit pyhton (ca 3monate) und habe immer Fesnter aufgerufen die eben nur per ja oder nein beantwortet werden müssen. Die antwort habe ich dann eingelesen in eine Excel Tabelle. Jetzt zu meinem Problem, wo ich das ganze We dran saß, wie bekomme ich es hin, das sich ein Fenster öffnet, ich was eingebe und dieses dann auslese. Ich muss genau 4 Eingaben machen, sind einfache Zahlenwerte.
mit dem yes/no Abfrage habe ich das immer so gemacht, kann man das ähnlich aufbauen?
Code: Alles auswählen
print "pause" #yesno window open
Tkinter.Tk().withdraw()
result = tkMessageBox.askyesno('´Test','Bestaetigung möglich ? ')
Value="Test"
Target= "Successful"
if result == 1:
print "Ja" #yesno window close
TestCaseState = "PASS"
Actual= "Successful"
else:
print "Nein" #yesno window close
TestCaseState = "FAIL"
Actual= "Failed"
testcondition(Value, Target, Actual, TestCaseState)
Danke schonmal im Voraus, falls ihr Tips für mich habt oder ähnliches
Re: Eingabe im Fenster
Verfasst: Dienstag 3. November 2009, 08:58
von mkesper
bb21 hat geschrieben:Danke schonmal im Voraus, falls ihr Tips für mich habt oder ähnliches
Willkommen im Forum!
Hast du schon mal das Tutorial durchgearbeitet?
Ansonsten der erste Tipp: Python-Code muss in Code-Tags (Python-Button) gesetzt werden, sonst ist er unlesbar.

Verfasst: Dienstag 3. November 2009, 09:14
von bb21
hey!
ja habe mit Hilfe des Tutorials schon die ganze Zeit gearbeitet und immer wenn ich ne Frage hatte mal reingeguckt, aber von vorne bis hinten ganz durchgearbeitet.. nein.
habe jetzt schon was gefunden im netz, so ähnlich soll es dann aussehen:
http://www.java2s.com/Code/Python/GUI-T ... fields.htm
aber wenn ich das probiere, öffnet sich das "tk-Fenster" und mein Programm stürzt dann ab, was ich eben mit der anderen Eingabe nicht hatte.
Verfasst: Dienstag 3. November 2009, 12:00
von numerix
Die langfristig sinnvollste Lösung sieht so aus, dass du dir zunächst einmal Zeit nimmst, dich in die Grundlagen von Tkinter einzuarbeiten. Das ist vielleicht ein wenig mühsam und beschert dir nicht nach 5 min die Lösung für dein aktuelles Problem, aber es ist tragfähiger:
1.
http://www.ferg.org/thinking_in_tkinter ... grams.html
2.
http://infohost.nmt.edu/tcc/help/pubs/tkinter/
3.
http://effbot.org/tkinterbook/tkinter-index.htm
Verfasst: Mittwoch 4. November 2009, 08:40
von bb21
ja danke für die links, werde dann mal reingucken.
ich werde mich nochmal etwas umgucken im netz nach einer lösung, wie ich das am besten mit der eingabe hinbekommen, klappt leider noch nicht ganz so wie ich will

Verfasst: Mittwoch 4. November 2009, 10:04
von numerix
bb21 hat geschrieben:ich werde mich nochmal etwas umgucken im netz nach einer lösung, wie ich das am besten mit der eingabe hinbekommen, klappt leider noch nicht ganz so wie ich will

Da brauchst du dich nicht im "Netz umgucken". Lies dich doch einfach mal in Tkinter ein. Dann findest du sehr bald das Entry-Widget und dann ist das ganze schnell gemacht.
Verfasst: Donnerstag 5. November 2009, 11:59
von bb21
Hi hallo,
danke nochmal für die Links, habe mich gestern mal den ganzen abend rangesetzt und bin da schon ne Ecke weiter.
Jetzt habe ich aber ein anderes Problem, was ich mir vielleicht persönlich zu schwer gemacht habe. Ich habe jetzt ein Fenster erstellt mit 3 Eingabemöglichkeiten und da ist mein Problem.
Ich lese mit einer for-Schleife meine Werte ein, die er mir in das Fenster schreiben soll, mein Problem ist jetzt aber das ich so die Werte nicht einzelnt auslesen kann, sondern nur als Ganzes. Habe auch schon in verschieden Tutorials geguckt, aber so richtig bin ich da nicht schlau drauß geworden.
Habe mal ein bsp mit beigefügt um das zu verdeutlichen.
Gehört zwar nicht hier rein von der Fragestellung aber ich wollte nicht unnötig einen neues Thema aufmachen.
--------------------------------------------------------------------------------
a = ['A', 'B', 'C']
for x in a:
print 'Variable => "%s"' % x
## Ergebnis
Variable => "A"
Variable => "B"
Variable => "C"
## Gewünschtes Ergebnis z.B.
Variable1 => "A"
Variable2 => "B"
Variable3 => "C"
--------------------------------------------------------------------------------
Verfasst: Donnerstag 5. November 2009, 13:22
von jbs
ich denke du willst enumerate
Mach aber für jede Frage, die ein neues Thema ist auch ein neues Thema auf.
Verfasst: Donnerstag 5. November 2009, 13:24
von busfahrer
Hallo
(ver)suchst du sowas
Code: Alles auswählen
a = ["A","B","C"]
for i,x in enumerate(a):
print 'Variable%s => "%s"'%(i+1,x)
##Ergebnis
Variable1 => "A"
Variable2 => "B"
Variable3 => "C"
Gruß...busfahrer
Verfasst: Donnerstag 5. November 2009, 13:40
von jbs
alternativ mit izip und count(1)
Verfasst: Freitag 6. November 2009, 09:09
von bb21
Hey danke euch schonmal,
so was in der art habe ich gesucht.
leider funktioniert das bsp bei mir nicht so richtig, aber ich werde mich da nochmal ransetzen und gucken was bei mir der Fehler ist.
Danke für die Hilfe!
Verfasst: Freitag 6. November 2009, 12:01
von wuf
Hallo bb21
Beim Beispiel von 'busfahrer' musst du darauf achten, dass die Zeilen nach dem Kommentar 'Ergebnis' kein Python-Code ist! Also nur folgender Code ausführen:
Code: Alles auswählen
a = ["A","B","C"]
for i,x in enumerate(a):
print 'Variable%s => "%s"'%(i+1,x)
Das folgende Ergebnis wird dann auf deiner Konsole ausgegeben:
So wird 'busfahrers' Beispiel auch bei dir funktionieren
Gruss wuf

Verfasst: Freitag 6. November 2009, 13:10
von bb21
Hi wuf,
ja danke, das hatte ich schon verstanden, da ich es ja oben ähnlich geschrieben hatte.
aber dennoch komisch das es bei euch hinhaut und bei mir nicht.
muss ich vor die funktionn och was schreiben, oder kann ich die einfach so übernehmen?
Grüße und danke weiterhin
Verfasst: Freitag 6. November 2009, 13:12
von wuf
Hallo bb21
Hier ein Experimentier-Skript für das Übertragen von Eingabedaten an eine Ausgabe basierend auf dem von 'busfahrer' vorgeschlagene 'enumerate'. (Lasse dich nicht durch die Farben ablenken!.Diese veranschaulichen nur die Verteilung der verschiedenen 'Frames'-Behälter):
Code: Alles auswählen
# wuf_ref: entry_on_mainwindow_01_01.py
import Tkinter as tk
def end_app():
"""Beende die Anwendung"""
app_win.destroy()
def entry_output():
"""Uebertrage Daten von der Eingabe in die Ausgabe"""
for index, entry_obj in enumerate(entry_obj_list):
entry_data = entry_obj.get()
output_obj_list[index].config(text=entry_data)
#~~ Erstelle das Hauptfenster
app_win = tk.Tk()
#~~ Abmessungen fuer das Hauptfenster
app_win.geometry('200x150')
#~~ Erstelle alle Behaelter-Objekte
in_out_frame = tk.Frame(app_win)
in_out_frame.pack(side='top', fill='both', expand='yes')
entry_frame = tk.Frame(in_out_frame, bg='yellow')
entry_frame.pack(side='left', fill='both', expand='yes')
output_frame = tk.Frame(in_out_frame, bg='green')
output_frame.pack(side='left', fill='both', expand='yes')
button_frame = tk.Frame(app_win, bg='steelblue')
button_frame.pack(side='top', fill='both', expand='yes')
#~~ Erstelle alle Bedienungsschaltflaechen-Objekte
# Schaltflaeche: Beenden
button_end = tk.Button(button_frame, text="Beenden", highlightthickness=0,
command=end_app)
button_end.pack(side='left', expand='yes')
# Schaltflaeche: Ausgeben
button_output = tk.Button(button_frame, text="Ausgabe", highlightthickness=0,
command=entry_output)
button_output.pack(side='left', expand='yes')
#~~ Variable-Liste
a = ["A", "B", "C", "D"]
#~~ Sammellisten fuer die Eingabe- und Ausgabe Widget-Objekte
entry_obj_list = list()
output_obj_list = list()
for index, variable in enumerate(a):
#~~ Erstelle Eingabe-Objekt
entry = tk.Entry(entry_frame, bg='white', width=10, highlightthickness=0)
entry.pack(side='top', expand='yes', pady=2)
#~~ Uebertrage Variable aus der Varible-Liste ins Eingabefeld
entry.insert(0, variable)
#~~ Erstelle Ausgabe-Objekt
output_label = tk.Label(output_frame, bg='white', width=10, anchor='w')
output_label.pack(side='top', expand='yes', pady=2)
#~~ Speichere Eingabe- und Ausgabe-Objekt in der zugehoerigen Objekt-
# Sammelliste
entry_obj_list.append(entry)
output_obj_list.append(output_label)
app_win.mainloop()
Gruss wuf

Verfasst: Freitag 6. November 2009, 13:21
von /me
bb21 hat geschrieben:aber dennoch komisch das es bei euch hinhaut und bei mir nicht.
Welche Fehlermeldung erhältst du?
Verfasst: Freitag 6. November 2009, 13:23
von wuf
bb21 hat geschrieben:aber dennoch komisch das es bei euch hinhaut und bei mir nicht.
Kannst du evt. hier dein Code zeigen?
Welches Betriebsystem und Python-Version verwendest du? Startest du dein Skript aus 'Idle' oder 'Konsole'?
Ich starte es aus der 'Konsole' und verwende Linux-SuSE11.0 mit Python2.5
Gruss wuf

Verfasst: Freitag 6. November 2009, 13:32
von bb21
Ich habe die Version 2.2.1 und XP. Er meckert immer "enumerate is not defined"...
fehlen mir vielleicht funktionen, bibliotheken die es erst in den versionen später gab?!
Verfasst: Freitag 6. November 2009, 13:44
von yipyip
Laut Doku gibt es 'enumerate' erst ab Python 2.3 .
Verfasst: Freitag 6. November 2009, 13:47
von bb21
ah ok, da liegt das problem... schade
gibt es dann noch ne andere möglichkeit außer enumerate?!
vielleicht was jbs meinte mit count(1) oder ähnliches?
Verfasst: Freitag 6. November 2009, 14:00
von yipyip
Code: Alles auswählen
In [16]: import itertools as it
In [17]: vars = ('a', 'b', 'c')
In [18]: for i, x in zip(it.count(1), vars): print '%s%s' % (x, i)
a1
b2
c3
Etwas weniger schoen:
Code: Alles auswählen
In [19]: for i, x in zip(xrange(1, len(vars)+1), vars): print '%s%s' % (x, i)
....:
a1
b2
c3
yipyip