Hi,
ich wüsste gern, ob es möglich ist bei einem Text-Widget z.B. jede zweite Zeile dunkler als die anderen zu färben. Ich habe schon versucht ein Bild ins Text-Widget einzubinden, konnte aber nicht "drüber" schreiben und hätte es sowieso gern ohne Bild. Falls es nur so geht, wüsste ich gerne, wie man das Bild komplett in den Hintergrund rücken kann.
Danke im Voraus,
asdman3000
Text-Widget mit unterschiedlich gefärbten Zeilen - Wie?
Ich tendiere zu "ja", wobei das je nach konkretem Anwendungsfall mehr oder weniger hässlich und mehr oder weniger aufwändig wird (es sei denn, ich hätte etwas naheliegendes übersehen).asdman3000 hat geschrieben:ich wüsste gern, ob es möglich ist bei einem Text-Widget z.B. jede zweite Zeile dunkler als die anderen zu färben.
Es lässt sich prinzipiell mit tags umsetzen. Wie kompliziert diese Umsetzung wird hängt z.B. davon ab, ob mit manuellen Zeilenumbrüchen gearbeitet wird und ob das Textwidget nur im read-only-Mode verwendet wird.
das wird dir helfen: http://www.python-forum.de/topic-17371.html?
-
- User
- Beiträge: 17
- Registriert: Donnerstag 1. April 2010, 15:05
Hi,
erstmal danke für die Antworten
http://www.4players.de/4players.php/dis ... ler_7.html
Ich hab also versucht das ganze mit tags zu machen (thx numerix!), ist aber noch nicht ganz ausgereift. Hier der Script-Ausschnitt:
Dadurch ist die erste Zeile in dem Fall dunkelrot, der Rest hellrot. Wenn ich jetzt allerdings in die Zeile schreib, wird das dunkelrote zusammengeschoben und die Hintergrundfarbe vom Text-Widget (eben das hellrot) kommt darunter vor. Ich könnte ja alles erst nach der Eingabe färben, aber ich möchte es schon wenn es noch leer ist mehrfarbig.
Vielen Dank,
asdman3000
erstmal danke für die Antworten
Nein, es soll ein Textfeld sein, in das der Benutzer mehrzeiligen Text schreiben kann, so wie die Pro/Contra Kästen auf dieser Seite (nur eben zum selber beschriften):Vielleicht willst Du auch eigentlich eine Tkinter.Listbox ...
http://www.4players.de/4players.php/dis ... ler_7.html
Ich hab also versucht das ganze mit tags zu machen (thx numerix!), ist aber noch nicht ganz ausgereift. Hier der Script-Ausschnitt:
Code: Alles auswählen
contra = Text(main, height = 12, width = 40, bg = "#f5e5e6", relief = FLAT)
contra.tag_config("redbg", background="red")
contra.insert("1.0", "\n", "redbg")
Damit konnte ich nichts anfangen, ich glaub meine Frage war zu ungenau, sry.das wird dir helfen: http://www.python-forum.de/topic-17371.html?
Vielen Dank,
asdman3000
wenn du dort auf der Seite guckst findest du von numerix ein Beispiel, was den Einsatz von Tags im Textwidget zeigt.asdman3000 hat geschrieben:Damit konnte ich nichts anfangen, ich glaub meine Frage war zu ungenau, sry.das wird dir helfen: http://www.python-forum.de/topic-17371.html?
Deinen Anforderungen angepasst sie es ungefähr so aus:
Code: Alles auswählen
import Tkinter as tk
root = tk.Tk()
text = tk.Text(root, width=40)
text.pack(padx=5, pady=5)
for i in range(10):
text.insert("0.0","Das ist ein Mustertext! \n")
text.config(bg="white", state="disabled")
text.tag_add("pro","1.0","3.0")
text.tag_add("contra","3.0","9.0")
text.tag_config("pro",foreground="blue", background='green')
text.tag_config("contra",foreground="blue", background='red')
root.mainloop()
Das hilft dir wahrscheinlich nicht mehr weiter, aber ich wollte meine Antwort noch rechtfertigen

Da die Tags "mitwandern" ist das genannte Beispiel leider nicht so ohne weiteres übertragbar. Solange es keinen Zeilenumbruch (EOL) gibt oder jede Zeile mit einem manuellen Zeilenumbruch beendet wird, geht es noch, wenn beides möglich ist (und wenn man Anwender Text eingeben lässt, ISST das möglich), dann wird es kniffliger.
-
- User
- Beiträge: 17
- Registriert: Donnerstag 1. April 2010, 15:05
Und die kann man so ineinander verschachteln, das jede zweite Zeile vom einen Text-Widget und die anderen vom anderen sind?Was spricht eigentlich gegen die Verwendung von 2 Textwidgets?

Verzeih mir, dass ich den unterstrichenen Teil der Aussage nicht verstehe.asdman3000 hat geschrieben:Und die kann man so ineinander verschachteln, das jede zweite Zeile vom einen Text-Widget und die anderen vom anderen sind?Was spricht eigentlich gegen die Verwendung von 2 Textwidgets?
Dafür hab ich hier mal einfach nachgebaut, dass was du als Vorlage gibst durch den Link.
Code: Alles auswählen
import Tkinter as tk
win = tk.Tk()
tk.Text(win, height=4, width=40).grid(columnspan=2)
pro_frame = tk.LabelFrame(win, text='PRO')
pro_frame.grid(column=0, row=1)
contra_frame = tk.LabelFrame(win, text='CONTRA')
contra_frame.grid(column=1, row=1)
hintergrund = {1: 'dark', 0: 'light'}
pro_entrys = []
contra_entrys = []
for i in range(10):
entry = tk.Entry(pro_frame, bg=hintergrund[i%2]+'green', relief='flat')
entry.grid(row=i)
pro_entrys.append(entry)
entry = tk.Entry(contra_frame, bg=hintergrund[i%2]+'blue', relief='flat')
entry.grid(row=i)
contra_entrys.append(entry)
win.mainloop()
Vielleicht hilft es dir ja...
-
- User
- Beiträge: 17
- Registriert: Donnerstag 1. April 2010, 15:05
Hi,
erstmal wegen dem Verständnis, der Satz von mir war ein bisschen komplex
aber mit dem Link is ja alles klar.
Jetzt zu dem Vorschlag das Ganze aus Entry-Widgets zusammenzusetzen:
Ist genau was ich brauche, vielen Dank! Auf die Idee bin ich gar nicht gekommen! Jetzt muss ich nur noch Zeilenumbruch per Eingabetaste einbinden und alles ist perfekt.
Thanks a ton!
asdman3000
erstmal wegen dem Verständnis, der Satz von mir war ein bisschen komplex

Jetzt zu dem Vorschlag das Ganze aus Entry-Widgets zusammenzusetzen:
Ist genau was ich brauche, vielen Dank! Auf die Idee bin ich gar nicht gekommen! Jetzt muss ich nur noch Zeilenumbruch per Eingabetaste einbinden und alles ist perfekt.
Thanks a ton!
asdman3000