如何在 Tkinter 中使变量的文本变为粗体?
How to make the text of a variable bold in Tkinter?
我有一个场景,我想将存在于 Tkinter 变量中的文本加粗。
代码如下:
best_batsmen = dataset.loc[dataset.loc[dataset['Innings']>=15,'Average'].idxmax(),'Names']
message = ("The best Batsman of the Tournament could possibly be: " + best_batsmen)
canvas_width = 500
canvas_height = 500
root = Toplevel()
root.geometry("700x600")
root.title("Best Batsman")
canvas = Canvas(root, width=canvas_width, height=canvas_height)
canvas.create_text(1, 10, anchor=W, text=message)
img = ImageTk.PhotoImage(Image.open("virat.jpeg"))
canvas.create_image(0, 20, anchor=NW, image=img)
canvas.image = img
canvas.pack()
root.mainloop()
在上面的代码中,我只想使用 Tkinter 将 best_batsmen 变量中的文本加粗。谁能帮我解决这个问题。
您可以在 canvas 上创建文本并编辑其字体样式。
canvas.create_text(1, 10, font=('arial', 20, BOLD), text='your text here')
为此,您必须从 tkinter 字体导入样式。
from tkinter.font import BOLD
您必须使用第二个 create_text
来仅放置带有 font='bold'
的文本 best_batsman
canvas.create_text(1, 10, anchor='w', text=message)
canvas.create_text(380, 10, anchor='w', text=best_batsmen, font='bold')
但您必须手动计算 best_batsmen
的 x
位置(即 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')
如果你把文字放在图片上方,这样你就不需要透明背景的文字,那么你可以使用 pack()
放置 Frame
并在 Frame
中放置两个 Labels
使用 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')
这样您就不必为 best_batsmen
计算 x
位置
然后你可以把图片放到合适的位置(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上。您必须在创建 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')
如果你想放在图片上 - 而不是上面 - 你必须在 create_image
之后使用 creat_window
。但是小部件(Frame
、'Label' 等)不能有透明背景。
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
和指定颜色和权重的标签。
您可以将消息分成两部分:
best_batsmen = 'Virat Kohli'
message = 'The best Batsman of the Tournament could possibly be: '
然后照常画第一部分:
msg = canvas.create_text(1, 10, text=message, anchor=W)
使用返回的项目 ID msg
获取 message
:
的边界框和字体
bbox = canvas.bbox(msg) # get the message bounding box
# import tkinter.font as tkfont
font = tkfont.Font(font=canvas.itemcget(msg, 'font')) # get the message font
然后设置字体粗细为'bold',并在第一部分末尾用粗体绘制第二部分:
font['weight'] = 'bold' # change font weight to bold
# show best_batsmen at the end of the message with bold style
canvas.create_text(bbox[2], bbox[1], text=best_batsmen, font=font, anchor=NW)
我有一个场景,我想将存在于 Tkinter 变量中的文本加粗。
代码如下:
best_batsmen = dataset.loc[dataset.loc[dataset['Innings']>=15,'Average'].idxmax(),'Names']
message = ("The best Batsman of the Tournament could possibly be: " + best_batsmen)
canvas_width = 500
canvas_height = 500
root = Toplevel()
root.geometry("700x600")
root.title("Best Batsman")
canvas = Canvas(root, width=canvas_width, height=canvas_height)
canvas.create_text(1, 10, anchor=W, text=message)
img = ImageTk.PhotoImage(Image.open("virat.jpeg"))
canvas.create_image(0, 20, anchor=NW, image=img)
canvas.image = img
canvas.pack()
root.mainloop()
在上面的代码中,我只想使用 Tkinter 将 best_batsmen 变量中的文本加粗。谁能帮我解决这个问题。
您可以在 canvas 上创建文本并编辑其字体样式。
canvas.create_text(1, 10, font=('arial', 20, BOLD), text='your text here')
为此,您必须从 tkinter 字体导入样式。
from tkinter.font import BOLD
您必须使用第二个 create_text
来仅放置带有 font='bold'
best_batsman
canvas.create_text(1, 10, anchor='w', text=message)
canvas.create_text(380, 10, anchor='w', text=best_batsmen, font='bold')
但您必须手动计算 best_batsmen
的 x
位置(即 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')
如果你把文字放在图片上方,这样你就不需要透明背景的文字,那么你可以使用 pack()
放置 Frame
并在 Frame
中放置两个 Labels
使用 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')
这样您就不必为 best_batsmen
x
位置
然后你可以把图片放到合适的位置(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上。您必须在创建 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')
如果你想放在图片上 - 而不是上面 - 你必须在 create_image
之后使用 creat_window
。但是小部件(Frame
、'Label' 等)不能有透明背景。
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
和指定颜色和权重的标签。
您可以将消息分成两部分:
best_batsmen = 'Virat Kohli'
message = 'The best Batsman of the Tournament could possibly be: '
然后照常画第一部分:
msg = canvas.create_text(1, 10, text=message, anchor=W)
使用返回的项目 ID msg
获取 message
:
bbox = canvas.bbox(msg) # get the message bounding box
# import tkinter.font as tkfont
font = tkfont.Font(font=canvas.itemcget(msg, 'font')) # get the message font
然后设置字体粗细为'bold',并在第一部分末尾用粗体绘制第二部分:
font['weight'] = 'bold' # change font weight to bold
# show best_batsmen at the end of the message with bold style
canvas.create_text(bbox[2], bbox[1], text=best_batsmen, font=font, anchor=NW)