[英]Is it possible to change the font of every menu option in Tkinter
我只是好奇是否有一种方法可以让我的 OptionMenu 中的每个选项都有不同的字体?所以在我的情况下,每个选项都有各自的字体。 到目前为止,我能在网上找到的只是将所有选项设置为相同的字体。 这是我的代码: 编辑:我得到它只有在我点击后才能看到正确的字体。
# function for font selection
def selectedFont(name, index, mode):
#fontLabel = tkinter.Label(top, text = font_clicked.get()).pack()
global font_path
if font_clicked.get() == 'Calibri':
font_path = "C:\Windows\Fonts\calibri.ttf"
dropDown.config(font = ('Calibri', 12))
return font_path
elif (font_clicked.get() == 'Comic Sans'):
font_path = "C:\Windows\Fonts\comic.ttf"
dropDown.config(font = ('Comic Sans MS', 12))
return font_path
elif (font_clicked.get() == 'Broadway'):
font_path = "C:\Windows\Fonts\BROADW.ttf"
dropDown.config(font = ('Broadway', 12))
return font_path
elif (font_clicked.get() == 'STENCIL'):
font_path = "C:\Windows\Fonts\STENCIL.ttf"
dropDown.config(font = ('Stencil', 12))
return font_path
elif (font_clicked.get() == 'Blackadder ITC'):
font_path = "C:\Windows\Fonts\ITCBLKAD.ttf"
dropDown.config(font = ('Blackadder ITC', 12))
return font_path
# options for font selection
optionsFont = [
"Calibri",
"Comic Sans",
"Broadway",
"STENCIL",
"Blackadder ITC"
]
#### drop down menu ####
font_clicked = tkinter.StringVar()
font_clicked.set(optionsFont[0])
dropDown = tkinter.OptionMenu(top, font_clicked, *optionsFont)
dropDown["menu"].config(bg="light pink", fg="black")
dropDown.config(bg = "gray81")
dropDown.pack()
dropDown.place(x=50,y=108, height = 30, width = 250)
Callbackname = font_clicked.trace_variable('w', selectedFont)
是的,可以在选项菜单中更改每个项目的字体,但请确保字体与 Tkinter 兼容,否则不会显示,您可以检查所有 fonts 与 Z6F8BBEA5A81184EBA8DZ78919 兼容
import tkinter as tk
import tkinter.font as font
root = tk.Tk()
print(list(font.families()))
现在要更改entryconfigure
方法可以通过其 object ( op['menu']
) 访问。 optionmenu 的菜单具有Tkinter菜单的所有选项。
看看这个例子。
import tkinter as tk
import tkinter.font as font
root = tk.Tk()
root.geometry('200x150')
var = tk.StringVar()
op = tk.OptionMenu(root, var, *font.families())
op.pack(pady=20)
lb = tk.Label(root, textvariable=var)
lb.pack()
for item in range(0, int(op['menu'].index('end'))):
op['menu'].entryconfig(item, font=font.Font(family=font.families()[item]))
var.trace('w', lambda *a: lb.config(font=op['menu'].entrycget(var.get(),'font')))
root.mainloop()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.