Jeden zweiten Buchstaben in ein Entry einfügen
Jeden zweiten Buchstaben in ein Entry einfügen
Wie kann ich nur jeden zweiten Buchstaben in ein Entry einfügen?
wort = 'hallo'
wort2 = ???
eingabe.insert(END, wort2)
wort2 soll also jeden zweiten Buchstaben beinhalten, in diesem Fall h l o
Ist dies möglich?
wort = 'hallo'
wort2 = ???
eingabe.insert(END, wort2)
wort2 soll also jeden zweiten Buchstaben beinhalten, in diesem Fall h l o
Ist dies möglich?
Re: Jeden zweiten Buchstaben in ein Entry einfügen
Unter Python-2.3 ist es ganz einfach:
wort2 = wort1[::2]
Gruß
Jörg
wort2 = wort1[::2]
Gruß
Jörg
"Sie sind nicht berechtigt, unrechtmäßige Kopien dieses Datenträgers zu erstellen." - Microsoft-Weisheit auf einer CD von MS-VisualC++-6.0
Hi. das ist nicht nur unter Python 2.3 einfach. Eine einfache For-Schleife/map/List Comprehension hilft auch weiter:
Milan
Code: Alles auswählen
wort2=""
for i in xrange(0,len(wort1),2):
wort2+=wort1[i]
#oder
wort2=("").join(map(lambda i:wort1[i],xrange(0,len(wort1),2))
#oder
wort2=("").join([wort1[i] for i in xrange(0,len(wort1),2)])
Milan
- Dookie
- Python-Forum Veteran
- Beiträge: 2010
- Registriert: Freitag 11. Oktober 2002, 18:00
- Wohnort: Salzburg
- Kontaktdaten:
Hi Pythino,
oder
Gruß
Dookie
Code: Alles auswählen
wort2 = " ".join(wort1[::2])
oder
Code: Alles auswählen
wort2 = " ".join(map(lambda i: wort1[i], xrange(0, len(wort1), 2))
Gruß
Dookie
Erstmal vielen Dank!
Es klappt alles soweit, allerdings ist eine kleine Sache merkwürdig:
Ich habe das besagte Entry, besser gesagt viele davon. Ich füge also per Event jeden zweiten Buchstaben ein. Wenn die Buchstaben eingefügt werden, bleibt der Cursor nicht im Entry, sondern wird ein normaler Mauszeiger. Daher kann ich nicht in das Entry schreiben, sondern muss erst wieder mit der Maus in das Fenster klicken.
Füge ich zusätzlich ein, dass der Cursor wieder in das Entry hüpfen soll, funktioniert das auch nicht.
Wahrscheinlich liegt's wieder einmal an meinem komischen PC...
Es klappt alles soweit, allerdings ist eine kleine Sache merkwürdig:
Ich habe das besagte Entry, besser gesagt viele davon. Ich füge also per Event jeden zweiten Buchstaben ein. Wenn die Buchstaben eingefügt werden, bleibt der Cursor nicht im Entry, sondern wird ein normaler Mauszeiger. Daher kann ich nicht in das Entry schreiben, sondern muss erst wieder mit der Maus in das Fenster klicken.
Füge ich zusätzlich ein, dass der Cursor wieder in das Entry hüpfen soll, funktioniert das auch nicht.
Wahrscheinlich liegt's wieder einmal an meinem komischen PC...

Zuletzt geändert von Pythino am Sonntag 25. April 2004, 19:02, insgesamt 1-mal geändert.
Hi Pythino
Ich verstehe deine folgende Satzstellung nicht:
'Ich füge also per Event jeden zweiten Buchstaben ein'
Mit was für einem Event?
Oder mit einer Funktion?
Oder mit der Methode eingabe.insert(....)?
Oder von Hand?
Meine Interpretation deines Problems ist wie folgt:
Wenn du etwas in dein Entry-Widget eingibst, wechsel
der Cursor nicht vom Pfeil in einen senkrechte Balken
(d.h. das Entrywidget hat den Fokus) und verhart so
lange als Balken, bis du deine Eingabe mit Enter be-
stätigt hast. Wenn du mit dem Maus-Cursor das Entryfeld
während der Eingabe verlässt, kannst du nichts mehr
eingeben.
Vielleicht kanst du ein wenig Code von deiner Anwendung
präsentieren. Weil der Python-Source Code spricht Klartext.
Gruss wuf
Ich verstehe deine folgende Satzstellung nicht:
'Ich füge also per Event jeden zweiten Buchstaben ein'
Mit was für einem Event?
Oder mit einer Funktion?
Oder mit der Methode eingabe.insert(....)?
Oder von Hand?
Meine Interpretation deines Problems ist wie folgt:
Wenn du etwas in dein Entry-Widget eingibst, wechsel
der Cursor nicht vom Pfeil in einen senkrechte Balken
(d.h. das Entrywidget hat den Fokus) und verhart so
lange als Balken, bis du deine Eingabe mit Enter be-
stätigt hast. Wenn du mit dem Maus-Cursor das Entryfeld
während der Eingabe verlässt, kannst du nichts mehr
eingeben.
Vielleicht kanst du ein wenig Code von deiner Anwendung
präsentieren. Weil der Python-Source Code spricht Klartext.
Gruss wuf

Take it easy Mates!
Also hier einmal ein kleiner Ausschnitt, allerdings etwas verändert:
Mit dem Event ist das Binding gemeint.
Ich hoffe, dass ich nichts vergessen habe; ich habe manche Definitionen ausgelassen, da diese schon immer funktioniert haben (siehe faktor...)
Das Problem, das ich beschrieben habe, taucht erst nach dem Einfügen des wort2 auf!
Das Problem ist sehr kompliziert daher versuche ich es einmal sehr einfach zu beschreiben:
Ich füge also mit Return das wort2 (jeder zweite Buchstabe) in ent ein.
Soweit ist es klar. Wort2 wird ohne Probleme eingefügt.
Ich habe bevor ich wort2 mit Return eingefügt habe, den Balken im Entry gehabt (logisch, sonst würde das Bindung auch nicht gehen)
Der Mauscursor (Zeiger) befindet sich immernoch auf dem Entry, ist allerdings wie bei jedem Eingabefeld ein nicht-blinkender Balkencursor.
Doch das was jetzt passiert, wenn ich Return drücke verwundert mich und gefällt mir nicht ganz:
Der nicht-blinkende Balkencursor wird zum normalen Mauszeiger!
Der blinkende Cursor im Entry hört auf zu blinken!
Wenn ich weiterschreiben will, geht dies erst beim ZWEITEN drücken eines Knopfes, nicht wie normal beim ersten.
Drücke ich Return, so erscheint bei der oberen Taskleiste das Menü mit: Fenster minimieren, schließen, maximieren etc.!
Ich hoffe ich habe mich jetzt deutlicher ausgedrückt!
Jetzt ist mir leider noch ein zweites Problem aufgefallen:
wort1 = wort2[anfang]
wort2 = "-".join(wort1[::2])
ent.insert(END, wort2)
Derselbe Skript wie schon oben, nur mit einem - anstatt der Leerstelle.
Wenn der letzte Buchstabe nicht angezeigt werden muss, da dieser ausgelassen werden soll, wird auch kein - angezeigt.
Beispiel:
wort=hallo
wort2 =h-l-o (Das klappt, da der letzte Buchstabe angezeigt wird)
wort = text
wort2 = t-x (Hier seht ihr, dass das letzte t wird nicht mehr angezeigt)
Code: Alles auswählen
def einfuegen(event):
wort1 = wort2[anfang]
wort2 = " ".join(wort1[::2])
ent.insert(END, wort2)
lab = Label(root,font = ('arial %d', int(15*faktor)), bg = 'gold',text = wort[i])
lab.pack(fill = BOTH)
ent = Entry(root, bg = 'blue', font = 'arial 10')
ent.pack()
ent.bind('<Return>', einfuegen)
Mit dem Event ist das Binding gemeint.
Ich hoffe, dass ich nichts vergessen habe; ich habe manche Definitionen ausgelassen, da diese schon immer funktioniert haben (siehe faktor...)
Das Problem, das ich beschrieben habe, taucht erst nach dem Einfügen des wort2 auf!
Das Problem ist sehr kompliziert daher versuche ich es einmal sehr einfach zu beschreiben:
Ich füge also mit Return das wort2 (jeder zweite Buchstabe) in ent ein.
Soweit ist es klar. Wort2 wird ohne Probleme eingefügt.
Ich habe bevor ich wort2 mit Return eingefügt habe, den Balken im Entry gehabt (logisch, sonst würde das Bindung auch nicht gehen)
Der Mauscursor (Zeiger) befindet sich immernoch auf dem Entry, ist allerdings wie bei jedem Eingabefeld ein nicht-blinkender Balkencursor.
Doch das was jetzt passiert, wenn ich Return drücke verwundert mich und gefällt mir nicht ganz:
Der nicht-blinkende Balkencursor wird zum normalen Mauszeiger!
Der blinkende Cursor im Entry hört auf zu blinken!
Wenn ich weiterschreiben will, geht dies erst beim ZWEITEN drücken eines Knopfes, nicht wie normal beim ersten.
Drücke ich Return, so erscheint bei der oberen Taskleiste das Menü mit: Fenster minimieren, schließen, maximieren etc.!
Ich hoffe ich habe mich jetzt deutlicher ausgedrückt!
Jetzt ist mir leider noch ein zweites Problem aufgefallen:
wort1 = wort2[anfang]
wort2 = "-".join(wort1[::2])
ent.insert(END, wort2)
Derselbe Skript wie schon oben, nur mit einem - anstatt der Leerstelle.
Wenn der letzte Buchstabe nicht angezeigt werden muss, da dieser ausgelassen werden soll, wird auch kein - angezeigt.
Beispiel:
wort=hallo
wort2 =h-l-o (Das klappt, da der letzte Buchstabe angezeigt wird)
wort = text
wort2 = t-x (Hier seht ihr, dass das letzte t wird nicht mehr angezeigt)
Hallo Pythino!
Danke für den feedback.
Ich möchte dein Problem austesten und habe
hierfür ein Skript, mittels einem Teil aus
deinem Skript, konstruiert.
Ich habe noch einige Probleme mit deinen
unbekannten Variablen:
anfang, word[i], word2
Ist die Variable word[i], welche dem Label
zugefügt wird, relevant für den Test??
Könntest du dieses Skript noch so ergänzen
damit man das Beispiel für 'hallo' austesten
kann.
Hier das Skript für den Test:
Gruss wuf
Danke für den feedback.
Ich möchte dein Problem austesten und habe
hierfür ein Skript, mittels einem Teil aus
deinem Skript, konstruiert.
Ich habe noch einige Probleme mit deinen
unbekannten Variablen:
anfang, word[i], word2
Ist die Variable word[i], welche dem Label
zugefügt wird, relevant für den Test??
Könntest du dieses Skript noch so ergänzen
damit man das Beispiel für 'hallo' austesten
kann.
Hier das Skript für den Test:
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
import sys
from Tkinter import *
def Beenden():
sys.exit(0)
def einfuegen(event):
wort1 = wort2[anfang]
wort2 = " ".join(wort1[::2])
ent.insert(END, wort2)
#~~ Erzeugt Hauptfenster
root = Tk()
root.configure(bd=2,relief='raised',bg='steelblue')
root.title('Eingabe-Pythino')
#~~ Zeichensatz für Label
font = ('Arial',10,'bold')
#~~ Konstanten
wort = 'hallo'
#~~ Labelfeld
lab = Label(root,
bd = 1,
relief = 'raised',
font = font,
bg = 'gold',
text = wort,
)
lab.pack(fill = BOTH,padx=10,pady=5)
#~~ Eingabefeld
ent = Entry(root,
bd = 1,
bg = 'white',
font = font,
)
ent.pack(padx=10,pady=5)
ent.bind('<Return>', einfuegen)
# Schaltfläche für Beenden
bende = Button(root, text = "Ende", command = Beenden)
bende.pack(side= 'bottom',pady=5)
root.mainloop()
Gruss wuf

Take it easy Mates!
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
import sys
from Tkinter import *
def Beenden():
root.destroy()
def einfuegen(event):
wort2 = "_".join(wort[::2])
ent.insert(END, wort2)
#~~ Erzeugt Hauptfenster
root = Tk()
root.configure(bd=2,relief='raised',bg='steelblue')
root.title('Eingabe-Pythino')
#~~ Zeichensatz für Label
font = ('Arial',10,'bold')
#~~ Konstanten
wort = 'hallo'
#~~ Labelfeld
lab = Label(root,
bd = 1,
relief = 'raised',
font = font,
bg = 'gold',
text = wort,
)
lab.pack(fill = BOTH,padx=10,pady=5)
#~~ Eingabefeld
ent = Entry(root,
bd = 1,
bg = 'white',
font = font,
)
ent.pack(padx=10,pady=5)
ent.bind('<Return>', einfuegen)
# Schaltfläche für Beenden
bende = Button(root, text = "Ende", command = Beenden)
bende.pack(side= 'bottom',pady=5)
root.mainloop()
Ich habe es jetzt noch etwas verändert, so funktioniert es allerdings. Das Problem könnte darin liegen, dass ich von einer Textdatei die Wörter heraus definiere und einsetze: wort2[anfang] ist einfach ein Wort aus einer Textdatei, wort[i] genauso.
Wenn es daran liegen sollte, müsste ich mein gesamtes Programm posten und das will ich eigentlich nicht

Falls es wirklich daran liegt und so sieht es aus, muss ich wohl damit leben.
Doch wichtiger wäre jetzt das zweite Problem, warum der letzte Buchstabe nicht mit - angezeigt wird

Danke für deine Hilfe.
Hallo Pythino
Hier etwas zum ausprobieren.
Ich liebe es manchmal mit
Code etwas verschwenderisch
umzugehen.
Gruss wuf
Hier etwas zum ausprobieren.
Ich liebe es manchmal mit
Code etwas verschwenderisch
umzugehen.
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
import sys
from Tkinter import *
def Beenden():
root.destroy()
def einfuegen(event):
spacer = 2
counter = 0
liste = list(wort)
for index, buchstabe in enumerate(liste):
counter += 1
if counter == spacer:
liste[index] = '-'
counter = 0
wort2 = "".join(liste)
ent.insert(END, wort2)
#~~ Erzeugt Hauptfenster
root = Tk()
root.configure(bd=2,relief='raised',bg='steelblue')
root.title('Eingabe-Pythino')
#~~ Zeichensatz für Label
font = ('Arial',10,'bold')
#~~ Konstanten
wort = 'text'
#~~ Labelfeld
lab = Label(root,
bd = 1,
relief = 'raised',
font = font,
bg = 'gold',
text = wort,
)
lab.pack(fill = BOTH,padx=10,pady=5)
#~~ Eingabefeld
ent = Entry(root,
bd = 1,
bg = 'white',
font = font,
)
ent.pack(padx=10,pady=5)
ent.bind('<Return>', einfuegen)
# Schaltfläche für Beenden
bende = Button(root, text = "Ende", command = Beenden)
bende.pack(side= 'bottom',pady=5)
root.mainloop()
Gruss wuf

Take it easy Mates!
Wer ist online?
Mitglieder in diesem Forum: 0 Mitglieder