Seite 1 von 1

"Einfg"-Taste nutzen

Verfasst: Sonntag 24. Oktober 2004, 19:32
von hendrik
Guten Tag,

ich schreibe gerade ein bestimmt noch nie dagewesenes Programm :-) und
habe dabei eine Frage.... Ich nutze Python/Tkinter unter GNU/Linux in der Version 2.3.3...
Ich frage stellt sich bei einem "Text"- Objekt. Ich würde gerne die Möglichkeit der
"Einfg"-Taste als Standart haben.

Es soll ein Programm zum erstellen von Gitarrentabulatur werden. Man erzeugt also
beliebig viele Spalten in diesem Stil:
E-----------------------------------------------------------------------------------------
A-----------------------------------------------------------------------------------------
D-----------------------------------------------------------------------------------------
G-----------------------------------------------------------------------------------------
B-----------------------------------------------------------------------------------------
e-----------------------------------------------------------------------------------------

Dort soll man dann den Cursor positionieren und die "-"-Zeichen durch die
Werte ersetzen. Hat jemand eine Idee / Ansatz / Lösung?

Vielen Dank im Vorraus,
Hendrik

Verfasst: Dienstag 26. Oktober 2004, 11:47
von hendrik
es ist nicht möglich / vorgesehen soweit ich, google und #python.de mir weiterhelfen konnten. alle die ein ähnliches problem haben, müssen wohl eine ersatzlösung suchen oder die gui nach wxpython portieren.

Verfasst: Dienstag 26. Oktober 2004, 13:00
von joe
Hi!
Ich hatte die ausgangsfrage nicht ganz verstanden. Du schreibst "Einfg"-Taste als Standart und weiter unten "-"-Zeichen durch die Werte ersetzen. Letzteres klingt eher nach überschreibmodus und gerade nicht nach einfügemodus.
Den überschreibemodus müsste man einfach mit delete() nachbilden können; also mit bind() auf tastendrücke reagieren und dann ein zeichen wieder löschen.
joe

Verfasst: Dienstag 26. Oktober 2004, 14:24
von mawe
Hi!

Ich hab mal ein wenig herumgespielt und das ist dabei rausgekommen:

Code: Alles auswählen

from Tkinter import *

def enter(e):
	row,col = t.index(INSERT).split('.')
	row,col = int(row),int(col)
	end = "%i.%i" % (row,col+1)
	start = "%i.%i" % (row,col)
	t.delete(start,end)

root = Tk()

t = Text(bg='white')
t.pack()

t.insert("0.1",'''
E---------------------------------------
A---------------------------------------
D---------------------------------------
G---------------------------------------
B---------------------------------------
e---------------------------------------
''')

t.bind("<Any-Key>", enter)

root.mainloop()
Naja, wenn Du dich mit den Cursortasten herumbewegen willst, musst Du die noch abfange (jetzt wird immer ein Zeichen gelöscht). Viel Spaß! :D

Falls das mal jemand braucht: INSERT enthält beim Text-Widget die Cursorposition.

Gruß, mawe

Verfasst: Dienstag 26. Oktober 2004, 14:53
von joe
Hallo!
mawe hat geschrieben:

Code: Alles auswählen

	row,col = t.index(INSERT).split('.')
	row,col = int(row),int(col)
	end = "%i.%i" % (row,col+1)
	start = "%i.%i" % (row,col)
	t.delete(start,end)
Etwas kompakter:

Code: Alles auswählen

    textctrl.delete(textctrl.index(INSERT))
joe

Verfasst: Dienstag 26. Oktober 2004, 15:26
von mawe
Hi!

Naja, etwas :D

Gruß, mawe

Verfasst: Dienstag 26. Oktober 2004, 20:25
von hendrik
vielen dank.

wenn man im notepad oder vergleichbarem die "einfg" / "insert" taste drückt, kann man bereits vorhandene zeichen überschreiben. das wäre für das programm hilffreich, um die zeichen schnell zu editieren und die "-" zu ersetzen. das geht aber laut "man Tk:Text" nicht. Vielleicht gibt es unter Tkinter eine Alternative, da ich Tkinter allgemein nicht so ansprechend finde, habe ich das Projekt nach wxpython portiert. Trotzdem nochmal danke, falles Bedarf da sein sollte, kann ich auch den Quelltext posten oder auf einen FTP schieben.

Verfasst: Dienstag 26. Oktober 2004, 20:35
von mawe
Hi!

Bedarf an Code ist immer vorhanden, also poste! :D (Showcase oder Codesnippets).

Gruß, mawe

Verfasst: Dienstag 26. Oktober 2004, 21:05
von joe
Hallo!
hendrik hat geschrieben: wenn man im notepad oder vergleichbarem die "einfg" / "insert" taste drückt, kann man bereits vorhandene zeichen überschreiben. das wäre für das programm hilffreich, um die zeichen schnell zu editieren und die "-" zu ersetzen. das geht aber laut "man Tk:Text" nicht.
Daß das geht, haben wir ja gezeigt. Und du kannst natürlich auch darauf reagieren, wenn jemand die einfg-taste drückt (bind("<Insert>",...)), also zwischen einfüge- und überschreibmodus wechseln.
joe