High all!
Ich habe eine Frage zu Textfelder in Tkinter.
Wie ist es möglich (oder ist es überhaupt möglich) Textfelder auszulesen um zum Beispiel die Länge der eingegebenen Zeichen zu ermitteln.
mfg nightm4r3^
Textfelder auslesen
-
- User
- Beiträge: 83
- Registriert: Montag 11. Februar 2008, 15:43
- Kontaktdaten:
Zitat von http://effbot.org/tkinterbook/text.htm
To fetch the text contents of the widget, use the get method:
contents = text.get(1.0, END)
-
- User
- Beiträge: 83
- Registriert: Montag 11. Februar 2008, 15:43
- Kontaktdaten:
Ich habe es jetzt so gemacht, aber er gibt mir jetzt die Fehlermeldung:
Woran liegt das?
Code: Alles auswählen
NameError: global name 'END' is not defined
Daran, dass Du immer noch nicht mit Namensräumen umgehen kannst. Der Name ist in Deinem Modul nicht definiert. Nun überleg doch mal, wo der definiert sein könnte.
Ich geb dir mal 'nen Tipp:
END ist eine Tkinter-Konstante.
Das Zitat mit der Beispielzeile setzt voraus, dass Tkinter mitttels Sternchen-Import importiert wurde. Das hast du anscheinend nicht gemacht und das ist auch gut so.
END ist eine Tkinter-Konstante.
Das Zitat mit der Beispielzeile setzt voraus, dass Tkinter mitttels Sternchen-Import importiert wurde. Das hast du anscheinend nicht gemacht und das ist auch gut so.
-
- User
- Beiträge: 83
- Registriert: Montag 11. Februar 2008, 15:43
- Kontaktdaten:
Ja ich habe es mit
gemacht.
Aber ich muss ja jetzt wohl kaum die Eingabe von 1.0 bis tk.END auslesen oder?
Code: Alles auswählen
import Tkinter as tk
Aber ich muss ja jetzt wohl kaum die Eingabe von 1.0 bis tk.END auslesen oder?
nightm4r3^ hat geschrieben:Aber ich muss ja jetzt wohl kaum die Eingabe von 1.0 bis tk.END auslesen oder?

Ansonsten - falls es nicht zu viel Arbeit ist: Probier es doch mal ...
-
- User
- Beiträge: 83
- Registriert: Montag 11. Februar 2008, 15:43
- Kontaktdaten:
ja jetzt kommt:
tut mir ja leid wenn ich mich so dumm anstell
Code: Alles auswählen
TypeError: get() takes exactly 1 argument (3 given)
So schlimm ist das nicht, so lange du nicht aufgibst ...nightm4r3^ hat geschrieben:tut mir ja leid wenn ich mich so dumm anstell
Die Fehlermeldung deutet darauf hin, dass du mit "Textfeld" (OP) kein Text-Widget meinst (das dachte ich und darauf bezog sich die bisherige Hilfe), sondern ein Entry-Widget. Da ein Entry-Widget nur eine Zeile umfasst, braucht get() da auch keine Parameter.
Also: Versuch es damit.
-
- User
- Beiträge: 83
- Registriert: Montag 11. Februar 2008, 15:43
- Kontaktdaten:
Also ich erläutere mal gerade mein Problem komplett:
Ich bin gerade dabei ein Programm zum chiffrieren zu schreiben. Das wäre auch alles gar kein Problem, aber in ein Entry Feld einen Text einzugeben der mehrere Zeilen lang ist, ist sehr unschön. Deshalb dachte ich mir mach ich das mit einem Text Feld.
So das ist das Problem. Wie kann ich nun diese Feld auslesen und in einer Definition weiterverrarbeiten.
Ich bin gerade dabei ein Programm zum chiffrieren zu schreiben. Das wäre auch alles gar kein Problem, aber in ein Entry Feld einen Text einzugeben der mehrere Zeilen lang ist, ist sehr unschön. Deshalb dachte ich mir mach ich das mit einem Text Feld.
So das ist das Problem. Wie kann ich nun diese Feld auslesen und in einer Definition weiterverrarbeiten.
Bei einem `Text`-Widget dürftest Du aber die Fehlermeldung nicht bekommen, denn dessen `get()` nimmt drei Argumente entgegen:
Code: Alles auswählen
In [53]: tk.Text.get?
Type: instancemethod
Base Class: <type 'instancemethod'>
String Form: <unbound method Text.get>
Namespace: Interactive
File: /home/bj/lib-tk/Tkinter.py
Definition: tk.Text.get(self, index1, index2=None)
Docstring:
Return the text from INDEX1 to INDEX2 (not included).
-
- User
- Beiträge: 83
- Registriert: Montag 11. Februar 2008, 15:43
- Kontaktdaten:
ich versteh es ja selber nicht. ich habe ein Textfeld mit dem Namen "text" und wenn ich es mit text.get(1.0, END) auslesen will, kommt ein Name Error.
-
- User
- Beiträge: 83
- Registriert: Montag 11. Februar 2008, 15:43
- Kontaktdaten:
ja und wenn ich es mit tk.END mache, dann kommt der attribute Fehler.
-
- User
- Beiträge: 83
- Registriert: Montag 11. Februar 2008, 15:43
- Kontaktdaten:
Code: Alles auswählen
import Tkinter as tk
def verschluesseln(text, versch):
laenge=len(text.get(1.0, tk.END))
text=text.upper()
versch=versch%26
chiffre=''
for i in range(0,laenge):
if text[i]==' ':
chiffre+=' '
elif 65<=ord(text[i])+versch<=90:
chiffre+=chr(ord(text.get(1.0, tk.END)[i])+versch.get())
elif ord(text.get()[i])+versch.get()>90:
chiffre+=chr(ord(text.get(1.0, tk.END)[i])+versch.get()-26)
else:
chiffre+=chr(ord(text.get(1.0, tk.END)[i])+versch.get()+26)
print chiffre
def chiff():
root.geometry('800x400')
ausgabe=tk.Text(root, text=verschluesseln(text.get(1.0, tk.END), versch.get()), width=50, height=20)
ausabe.place(x=410, y=70)
def dechiff():
root.geometry('450x400')
root=tk.Tk()
root.geometry('450x400')
root.title('Verschlüsselung')
root.label=tk.Label(root, text='Chiffrierung und Dechiffrierung', font=('Verdana',16,'bold'))
root.label.place(x=10, y=20)
root.label2=tk.Label(root, text='Bitte geben Sie den zu verschlüsselnden Text ein: ')
root.label2.place(x=10, y=50)
versch=tk.Entry(root)
versch.place(x=10, y=70)
text=tk.Text(root, width=50, height=20)
text.place(x=10, y=100)
root.button=tk.Button(root, text='Chiffrieren',
command=chiff)
root.button.place(x=370, y=100)
root.button=tk.Button(root, text='Dechiffrieren',
command=dechiff)
root.button.place(x=370, y=130)
root.mainloop()
Und das ist der Fehler:
Code: Alles auswählen
Exception in Tkinter callback
Traceback (most recent call last):
File "F:\Python25\lib\lib-tk\Tkinter.py", line 1403, in __call__
return self.func(*args)
File "F:\Python25\Python Programme(self)\verschluesseln.py", line 25, in chiff
ausgabe=tk.Text(root, text=verschluesseln(text.get(), versch.get()), width=50, height=20)
TypeError: get() takes at least 2 arguments (1 given)
Ich weiß hier gefällt vielen mein Programmierstil nicht, aber das soll jetzt mal egal sein.
-
- User
- Beiträge: 83
- Registriert: Montag 11. Februar 2008, 15:43
- Kontaktdaten:
was soll ich machen? wieso passt die net zum code
-
- User
- Beiträge: 65
- Registriert: Samstag 9. Juni 2007, 23:45
Der Code, den du gepostet hast, läuft ohne die von dir gezeigte Fehlermeldung. Geht aber trotzdem nicht, weil du da total konfuse Sachen machst, aber zumindest die von dir monierte Fehlermeldung tauch nicht auf.
Und die Exception kann da gar nicht drauf passen, weil die darin aufgeführte Zeile in deinem geposteten Quelltext gar nicht in der Form existiert, sondern schon korrigiert ist.
Und die Exception kann da gar nicht drauf passen, weil die darin aufgeführte Zeile in deinem geposteten Quelltext gar nicht in der Form existiert, sondern schon korrigiert ist.
Hallo nightm4r3^
Ich bin am debugen des Verschlüsselungskriptes.
Vorab:
a) Da gibt es ein Entry-Widget 'versch'
b) Ein Text-Widget 'text'
Ich nehme an Du gibst den zu verschlüsselnden
Text in das Entry-Widget 'versch' ein und gibst
mit dem aktivierten der Schaltfläche 'Chiffrieren'
die Verschlüsselung ins grosse Text-Widget 'text'
aus.
Meine bis jetzt gemachten Feststellungen sind:
a) In Zeile 5 steht:
laenge=len(text.get(1.0, tk.END))
Meiner Meinung nach sollte dort folgendes stehen:
laenge=len(text)
Da Du in der Funktion 'chiff' beim Aufruf der
Funktion 'verschluesseln' als Argument für 'text'
text.get(1.0, tk.END) schon ausgeführt wird
und in der Funktion 'verschluesseln' der
Parameter 'text' als Zeichenkette verfügbar ist.
Auf den Parameter 'text' kann dann die Funktion
len('text') problemlos angewendet werden.
b) In Zeile 23 steht:
ausabe.place(x=410, y=70)
Muss aber heissen:
ausgabe.place(x=410, y=70)
Kannst Du eventuell einen kurzen Beschrieb des
Eingabe-Handlings bzw. über den geplanten Ablauf
des Verschlüsselung-Prozesses erstellen.
Gruss wuf
Ich bin am debugen des Verschlüsselungskriptes.
Vorab:
a) Da gibt es ein Entry-Widget 'versch'
b) Ein Text-Widget 'text'
Ich nehme an Du gibst den zu verschlüsselnden
Text in das Entry-Widget 'versch' ein und gibst
mit dem aktivierten der Schaltfläche 'Chiffrieren'
die Verschlüsselung ins grosse Text-Widget 'text'
aus.
Meine bis jetzt gemachten Feststellungen sind:
a) In Zeile 5 steht:
laenge=len(text.get(1.0, tk.END))
Meiner Meinung nach sollte dort folgendes stehen:
laenge=len(text)
Da Du in der Funktion 'chiff' beim Aufruf der
Funktion 'verschluesseln' als Argument für 'text'
text.get(1.0, tk.END) schon ausgeführt wird
und in der Funktion 'verschluesseln' der
Parameter 'text' als Zeichenkette verfügbar ist.
Auf den Parameter 'text' kann dann die Funktion
len('text') problemlos angewendet werden.
b) In Zeile 23 steht:
ausabe.place(x=410, y=70)
Muss aber heissen:
ausgabe.place(x=410, y=70)
Kannst Du eventuell einen kurzen Beschrieb des
Eingabe-Handlings bzw. über den geplanten Ablauf
des Verschlüsselung-Prozesses erstellen.
Gruss wuf

Take it easy Mates!