Kann ich ein Tkinter-Canvas erstellen, das mehrere Zeilen in einem Text-Widget umfasst?


Max Widder

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()
Martineau

Das Widget window_create(), das dem Texthinzugefü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 FrameBild und die TextWidgets 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

Screenshot mit Text neben dem Bild

Verwandte Artikel


Wie finde ich Muster in Text, der mehrere Zeilen umfasst?

Rajat Mitra Ich habe nach indizierten Array-Elementen gesucht, die in Sammlungen gruppiert sind (durch Kommas getrennt), und die Suche sollte zu so etwas führen (siehe das Beispiel für Dateidaten unten). [ 'foo[0]', 'foo[1]', 'foo[2]', ..., 'foo

python tkinter Kann ich ein Widget in Pixel erstellen? mit Text?

Kwon Hyung-hwan Ich möchte ein Text-Widget in Pixelgröße erstellen. Aber immer auf Schriftgröße einstellen. Hier ist mein Code: import tkinter as tk root = tk.Tk() test_btn = tk.Button(root, text="test", height=10, width=10) test_btn.pack() root.mainloop(

So erstellen Sie ein Eingabefeld (HTML), das zwei Zeilen umfasst

Chris Jones Ich möchte in der Lage sein, eine <input>Feldsteuerung zu verwenden, aber nur zwei Zeilen zulassen. Im Moment verwende ich zwei Felder, habe mich aber gefragt, ob jemand eine Lösung finden kann, um Eingaben zuzulassen (ähnlich einem Textbereich), a