Zeilenumbruch im Textwidget (Wie möglich?)

Fragen zu Tkinter.
Antworten
Evil4President
User
Beiträge: 83
Registriert: Dienstag 15. Januar 2008, 15:39
Kontaktdaten:

Mittwoch 14. Mai 2008, 22:43

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
BlackJack

Donnerstag 15. Mai 2008, 07:12

Ich verstehe das Problem nicht ganz. Das Widget setzt Zeilenumbrüche ('\n') um und im Normalzustand werden zu lange Zeilen bei mir auch umgebrochen.
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Donnerstag 15. Mai 2008, 12:22

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()
pyStyler
User
Beiträge: 311
Registriert: Montag 12. Juni 2006, 14:24

Donnerstag 15. Mai 2008, 12:58

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
Evil4President
User
Beiträge: 83
Registriert: Dienstag 15. Januar 2008, 15:39
Kontaktdaten:

Donnerstag 15. Mai 2008, 16:00

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?
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Donnerstag 15. Mai 2008, 16:34

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.
Evil4President
User
Beiträge: 83
Registriert: Dienstag 15. Januar 2008, 15:39
Kontaktdaten:

Donnerstag 15. Mai 2008, 20:12

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...
Antworten