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?
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)])
Vielen Dank, es funktioniert natürlich.
Jetzt müsste ich nur noch wissen, wie ich zwischen jedem Buchstaben eine Leerstelle setze. Leider ist meine Lösung noch nicht einfach genug oder funktioniert auch nicht einwandfrei.
Also hallo müsste nicht: hlo, sondern h l o heißen.
Jetzt müsste ich nur noch wissen, wie ich zwischen jedem Buchstaben eine Leerstelle setze. Leider ist meine Lösung noch nicht einfach genug oder funktioniert auch nicht einwandfrei.
Also hallo müsste nicht: hlo, sondern h l o heißen.
-
- 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])
Code: Alles auswählen
wort2 = " ".join(map(lambda i: wort1[i], xrange(0, len(wort1), 2))
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.
Hallo wuf,
das löst mein Problem leider gar nicht, oder ich weiß nicht damit umzugehen...
das löst mein Problem leider gar nicht, oder ich weiß nicht damit umzugehen...
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)
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, word2
Ist die Variable word, 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, word2
Ist die Variable word, 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()
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()
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()
Take it easy Mates!
Wow, es funktioniert! Vielen Dank, wuf.
Woran könnte jetzt das Verschwinden des Balken liegen?
Wie gesagt, ich habe 5 Entrys, einen Zähler, der die Wörter in einer Textdatei der Reihe nach einliest.
Vielleicht fällt jemandem noch etwas ein...
Woran könnte jetzt das Verschwinden des Balken liegen?
Wie gesagt, ich habe 5 Entrys, einen Zähler, der die Wörter in einer Textdatei der Reihe nach einliest.
Vielleicht fällt jemandem noch etwas ein...
Hallo Pythino!
Meine Frage ist folgende:
Kann das Balken-Problem mit dem
letzten Test-Skript mit nur einem
Entry-Feld sichtbar gemacht werden?
Das heisst ist es möglich mit diesem
Skript das Fehlverhalten des Cursor
auszulösen oder muss das Skript mit
den zusätzlichen Entry-Feldern er-
gänzt werden?
Ich persönlich sehe das Fehlverhalten
mit diesem Skript noch nicht!
Ich kann dir nur helfen, wenn du das
Skript noch soweit ergänzen bzw. er-
weitern könntest, dass sich das Problem
simulieren lässt.
Gruss wuf
Meine Frage ist folgende:
Kann das Balken-Problem mit dem
letzten Test-Skript mit nur einem
Entry-Feld sichtbar gemacht werden?
Das heisst ist es möglich mit diesem
Skript das Fehlverhalten des Cursor
auszulösen oder muss das Skript mit
den zusätzlichen Entry-Feldern er-
gänzt werden?
Ich persönlich sehe das Fehlverhalten
mit diesem Skript noch nicht!
Ich kann dir nur helfen, wenn du das
Skript noch soweit ergänzen bzw. er-
weitern könntest, dass sich das Problem
simulieren lässt.
Gruss wuf
Take it easy Mates!
Habe jetzt schon alles ausprobiert, weiß aber immernoch nicht, woran es legen soll. Jetzt hätte ich eine Idee, wie man das Problem einfach umgehen könnte:
Das ist ja ein normales Binding. Kann man den Spieß nicht einfach umdrehen und beim Ausführen der Funktion (bla) Return drücken lassen?
Das heißt für eine Funktion, wenn sie ausgeführt wird, wird eine bestimmte Taste gedrückt.
Z.B. Tab drücken, wenn eine Funktion ausgeführt wird?
Code: Alles auswählen
[...]
def bla(event):
a = a + 1
root.bind('<Return>', bla)
Das heißt für eine Funktion, wenn sie ausgeführt wird, wird eine bestimmte Taste gedrückt.
Z.B. Tab drücken, wenn eine Funktion ausgeführt wird?