Вы должны использовать второй create_text
, чтобы поместить только текст best_batsman
с font='bold'
canvas.create_text(1, 10, anchor='w', text=message)
canvas.create_text(380, 10, anchor='w', text=best_batsmen, font='bold')
, но вы должны вручную вычислить x
позицию для best_batsmen
(то есть. 380
)
import tkinter as tk
from PIL import Image, ImageTk
best_batsmen = "James Bond"
message = "The best Batsman of the Tournament could possibly be: "
canvas_width = 500
canvas_height = 500
root = tk.Tk()
canvas = tk.Canvas(root, width=canvas_width, height=canvas_height)
canvas.pack()
canvas.create_text(1, 10, anchor='w', text=message)
canvas.create_text(380, 10, anchor='w', text=best_batsmen, font='bold')
img = ImageTk.PhotoImage(Image.open("virat.jpeg"))
canvas.create_image(0, 20, anchor='nw', image=img)
#canvas.image = img
root.mainloop()
В конце концов вы можете попытаться вычислить позицию с помощью tkinter.font.Font().measure()
import tkinter.font as tkfont
#width = tkfont.Font(family='arial', size=20, weight='normal').measure(message)
width = tkfont.Font().measure(message)
canvas.create_text(width, 10, anchor='w', text=best_batsmen, font='bold')
Если вы поместите текст над изображением, чтобы вам не нужен текст с прозрачным фономзатем вы можете поместить Frame
, используя pack()
, и поместить два Labels
в Frame
, используя pack(side='left')
frame = tk.Frame(root)
frame.pack()
tk.Label(frame, text=message).pack(side='left')
tk.Label(frame, text=best_batsmen, font='bold').pack(side='left')
Таким образом, вам не нужно вычислять x
позицию для best_batsmen
И вы можете поместить изображение в положение (0, 0)
import tkinter as tk
from PIL import Image, ImageTk
best_batsmen = "James Bond"
message = "The best Batsman of the Tournament could possibly be: "
canvas_width = 500
canvas_height = 500
root = tk.Tk()
frame = tk.Frame(root)
tk.Label(frame, text=message).pack(side='left')
tk.Label(frame, text=best_batsmen, font='bold').pack(side='left')
frame.pack()
canvas = tk.Canvas(root, width=canvas_width, height=canvas_height)
canvas.pack()
img = ImageTk.PhotoImage(Image.open("virat.jpeg"))
canvas.create_image(0, 0, anchor='nw', image=img)
#canvas.image = img
root.mainloop()
Или вы можете использовать create_window(..., window=frame)
, чтобы поместить его на холст.Вы должны сделать это после создания Canvas
.
frame = tk.Frame(root)
canvas.create_window(0, 0, window=frame, anchor='nw')
tk.Label(frame, text=message).pack(side='left')
tk.Label(frame, text=best_batsmen, font='bold').pack(side='left')
Если вы хотите нанести изображение - не выше - вам придется использовать creat_window
после create_image
.Но виджеты (Frame
, «Метка» и т. Д.) Не могут иметь прозрачного фона.
import tkinter as tk
from PIL import Image, ImageTk
import tkinter.font as tkfont
best_batsmen = "James Bond"
message = "The best Batsman of the Tournament could possibly be: "
canvas_width = 500
canvas_height = 500
root = tk.Tk()
canvas = tk.Canvas(root, width=canvas_width, height=canvas_height)
canvas.pack()
frame = tk.Frame(root)
canvas.create_window(1, 0, window=frame, anchor='nw')
tk.Label(frame, text=message).pack(side='left')
tk.Label(frame, text=best_batsmen, font='bold').pack(side='left')
img = ImageTk.PhotoImage(Image.open("virat.jpeg"))
canvas.create_image(0, 20, anchor='nw', image=img)
#canvas.image = img
root.mainloop()
Вместо Frame
с Labels
вы можете использовать Text
с тегами с назначенными цветами и весом.