繁体   English   中英

是否可以更改 Tkinter 中每个菜单选项的字体

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM