簡體   English   中英

如何在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變量內的文本。 誰能幫我解決這個問題。

您必須使用第二個create_textbest_batsman帶有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')

如果你把上面的圖像文本,所以你不需要用透明背景的文本,然后你就可以把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')

這樣,您不必為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之后,您必須執行此操作。

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

可以使用帶有分配了顏色和權重的標簽的Text代替帶有LabelsFrame

您可以在畫布上創建文本並編輯其字體樣式。

canvas.create_text(1, 10, font=('arial', 20, BOLD), text='your text here')

為此,您必須從tkinter字體導入樣式。

from tkinter.font import BOLD

您可以將消息分為兩部分:

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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM