Seite 1 von 1

Zeilenumbruch im Textwidget (Wie möglich?)

Verfasst: Mittwoch 14. Mai 2008, 22:43
von Evil4President
Hi Leute,
habe bereits auf http://effbot.org/tkinterbook/text.htm nachgeschaut, konnte jedoch nichts finden, wie man einen Zeilenumbruch im Textfeld "befehlen" kann. Ich habe ein Verschlüsselungsprogramm geschrieben, das den chiffrierten Text in einem Textfeld ausgibt. Jedoch habe ich bisher das Problem, dass der Text über die Fensterbreite hinaus geht, jenachdem wie lang der eingegebene Text ist.
Kann mir bitte jemand helfen?

MFG

Verfasst: Donnerstag 15. Mai 2008, 07:12
von BlackJack
Ich verstehe das Problem nicht ganz. Das Widget setzt Zeilenumbrüche ('\n') um und im Normalzustand werden zu lange Zeilen bei mir auch umgebrochen.

Verfasst: Donnerstag 15. Mai 2008, 12:22
von numerix
Zeig mal den Code. Wie BlackJack schon gesagt hat:
Eigentlich sollte hier kein Problem sein. Guckst du hier:

Code: Alles auswählen

import Tkinter as tk

root = tk.Tk()
tf = tk.Text(root,width=20)
tf.insert("0.0","Das ist ein elend langer Text - passt nicht in eine Zeile.")
tf.pack()
root.mainloop()

Verfasst: Donnerstag 15. Mai 2008, 12:58
von pyStyler
Hallo,

meinst du so?

Code: Alles auswählen

import Tkinter 

root = Tkinter.Tk()
text = Tkinter.Text(root, wrap='word') # achte auf wrap!
text.pack(expand=Tkinter.YES, fill=Tkinter.BOTH)

Tkinter.mainloop()
Gruss
pyStyler

Verfasst: Donnerstag 15. Mai 2008, 16:00
von Evil4President
Ich habe im Programmablauf einen immer unterschiedlich langen String, der in der Variable "verschluesselt" gespeichert wird. Beim Programm handelt es sich um einen Verschlüsselungsalgorithmus. Die Variable wird dann in einem Textfeld angezeigt:

Code: Alles auswählen

Chiffriert.insert('1.0',entschluesselt)
Nur wenn der Text zulang ist, bricht er nicht automatisch in die nächste Zeile um. Das mit "wrap" habe ich auch schon gesehen, nur wie genau kann ich da einstellen, dass er nach einer bestimmten Zeilenlänge eine neue Zeile beginnt?

Habe mal das letzte Skript ausprobiert, um zu verstehen, was bei wrap passiert, jedoch scheint es mir so, dass da nicht viel passieren kann, da nichts genau festgelegt ist. Was genau definiert man denn mit dem "wrap=word"? Kann es auch sein, dass er nicht umbricht, weil ich "place" statt "pack" oder "grid" verwende?


So habe ich mein Textfeld festgelegt:

Code: Alles auswählen

Chiffriert=Text(root,width=12,height=1)
Das mit der Höheneinstellung musste sein, da er ansonsten ein viel zu hohes Feld anzeigt... Ist das denn überhaupt normal?

Verfasst: Donnerstag 15. Mai 2008, 16:34
von numerix
Du bist ein echter Spaßvogel: Wenn du dem Text durch Festlegung von height=1 genau 1 Zeile Platz lässt, wo soll er denn dann deines Erachtens nach einem Zeilenumbruch hin?

Wenn klar ist, dass du max. 2 Zeilen brauchst, dann leg doch height=2 fest und alles ist gut.

Verfasst: Donnerstag 15. Mai 2008, 20:12
von Evil4President
Ja, daran habe ich jetzt erstmal nicht gedacht. Aber das Problem besteht eigentlich weiterhin...Wenn ich einfach das Textfeld erstelle mit width=20 meinetwegen, dann ist die Höhe auf ca. 12 gesetzt schätze ich... Daher muss ich ihm doch dann sagen, dass er erstmal eine Zeile nehmen soll... Nur wie kann ich dann testen, ob meine Fensterbreite erreicht ist? Dann soll er meinetwegen mit textfenster.config(height=2) die Zeilen erweitern...
Bin halt noch nicht so lange dabei, daher passieren mir manchmal solche blöden Fehler...