python-3.x ttk Entry小部件是否忽略通过样式应用的字体?

3j86kqsm  于 2023-02-10  发布在  Python
关注(0)|答案(3)|浏览(150)
from tkinter import Tk
from tkinter.ttk import Style, Entry
import tkinter.font as tkfont

root = Tk()

font = tkfont.Font(family='Helvetica', size=30, slant='italic')
style = Style()
style.configure('Custom.TEntry', font=font, foreground='green')
entry_font = Entry(root, font=font, foreground='green')
entry_font.insert(0, 'directly configured')
entry_font.pack()
entry_style = Entry(root, style='Custom.TEntry')
entry_style.insert(0, 'styled entry')
entry_style.pack()

root.mainloop()

第一个条目对字体有响应,而第二个条目没有。有没有办法使用样式来应用字体?

elcex8rz

elcex8rz1#

来自:http://infohost.nmt.edu/tcc/help/pubs/tkinter/web/ttk-Entry.html
使用此选项指定将在小部件中显示的文本的字体;请参阅第5.4节"键入字体"。2由于作者不清楚的原因,此选项不能与样式一起指定。
我想我会直接做的

gv8xihay

gv8xihay2#

有一些变通办法。
你可以把半直接的font=style.lookup("Custom.TEntry", "font")加到你的Entry上,虽然不漂亮,但是你仍然可以在一个地方拥有风格。

from tkinter.ttk import Style, Entry

style = Style()
style.configure('Custom.TEntry', font=('sans-serif', 30), foreground='green')

# somewhere else in the code
style = Style()
entry = Entry(root, style="Custom.TEntry", font=style.lookup("Custom.TEntry", "font"))

您也可以将原始的Entry子类化并修复它。

from tkinter.ttk import Style, Entry

class StyledEntry(Entry):
    def __init__(self, master=None, widget=None, **kw):
        if "font" not in kw:
            style = kw.get("style", "TEntry")
            kw["font"] = Style().lookup(style, "font")

        super().__init__(master=master, widget=widget, **kw)

# and later just
entry = StyledEntry(root, style="Custom.TEntry")
rlcwz9us

rlcwz9us3#

可以,但您可以通过tk方式配置字体:

entry_font.configure(font=('TkTextFont', 20))

相关问题