Можно ли изменить шрифт каждого пункта меню в Tkinter - PullRequest
1 голос
/ 27 мая 2020

Мне было просто любопытно, есть ли способ, чтобы каждая опция в моем 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)

1 Ответ

3 голосов
/ 27 мая 2020

Да, можно изменить шрифт каждого элемента в меню параметров, но убедитесь, что шрифт совместим с Tkinter, иначе он не появится, вы можете проверить все шрифты, совместимые с Tkinter,

import tkinter as tk
import tkinter.font as font

root = tk.Tk()
print(list(font.families()))

Теперь, чтобы изменить каждый шрифт в optionmenu , мы используем метод entryconfigure меню, связанный с optionmenu виджет может быть доступен через его объект (op['menu']). Меню optionmenu содержит все options меню 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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...