Kann ich ein Tkinter-Canvas erstellen, das mehrere Zeilen in einem Text-Widget umfasst?
Ich möchte ein Text-Widget erstellen, in das eine Zeichenfläche in Text eingefügt werden kann. Ich habe es fast perfekt, aber ich brauche die Leinwand, um zwei Zeilen Raum einzunehmen. Ich möchte, dass die erste Zeile 'Tom 24/11/2019' mit der Oberseite der Leinwand und die zweite Zeile 'Hi Jim' mit der Unterseite der Leinwand ausgerichtet wird. Ist das, was ich versuche, in irgendeiner Weise möglich?
import tkinter as tk
sender='Tom'
dt='24/11/2019'
message='Hi Jim!'
root = tk.Tk()
text = tk.Text(root)
text.pack(padx = 10, pady = 10)
text.window_create(tk.END, window = tk.Canvas(root,bg='red',width=50,height=50)) # Example 2
text.tag_configure("sender", font="Arial 12 bold")
text.tag_configure("message", font="Arial 10",lmargin1=55,lmargin2=55)
text.tag_configure("date", font="Arial 8")
text.insert("end", sender.title()+' ',"sender")
text.insert("end", dt+'\n','date')
text.insert("end", message+'\n\n', 'message')
root.mainloop()
Das Widget window_create()
, das dem Text
hinzugefügt wird, ähnelt einem einzelnen Zeichen, und Sie können keinen Text in mehreren Zeilen daneben hinzufügen.
Hier ist eine Problemumgehung (wenn ich verstehe, was Sie wollen). Es erstellt ein Frame
Bild und die Text
Widgets und packt sie nebeneinander. Dadurch wird der Text unabhängig vom Bild und Sie können Zeichenfolgen einfügen, die am linken Rand ausgerichtet werden.
Es ist zwar möglich, die zweite Saite ganz unten auszurichten, aber ich kenne keine Möglichkeit, dies ohne weiteres zu tun. Im folgenden Code habe ich gerade eine leere Zeile zwischen die beiden Zeichenfolgen eingefügt und es hat einfach ganz gut geklappt (IMO).
import tkinter as tk
sender = 'Tom'
dt = '24/11/2019'
message = 'Hi Jim!'
root = tk.Tk()
frame = tk.Frame(root, bg='white', bd=0, highlightthickness=0)
frame.pack()
canvas = tk.Canvas(frame, bg='red', width=50, height=50)
canvas.pack(side=tk.LEFT, anchor=tk.NW)
text = tk.Text(frame, bd=0)
text.pack(side=tk.LEFT, anchor=tk.NW)
text.tag_configure("sender", font="Arial 12 bold")
text.tag_configure("message", font="Arial 10") # , lmargin1=55, lmargin2=55)
text.tag_configure("date", font="Arial 8")
text.insert("end", sender.title()+' ', "sender")
text.insert("end", dt+'\n', 'date')
text.insert("end", '\n') # Add a blank line to move next one down.
text.insert("end", message+'\n\n', 'message')
root.mainloop()
Bildschirmfoto