无法在python Tkinter文本编辑器中动态更改字体

时间:2015-02-06 00:36:59

标签: python-2.7 fonts tkinter text-editor

最近我一直在研究GUI python纯文本编辑器。代码调用此函数:

def TimesNewRoman():
    global fontname
    global font
    fontname = "Times New Roman"
    print font

变量是:

fontname = "Calibri"
size = "14"
font = fontname + " " + size

Tkinter用代码读取字体:

textPad.config(
    borderwidth=0,
    font=font ,
    foreground="green",
    background="black",
    insertbackground="white", # cursor
    selectforeground="blue", # selection
    selectbackground="#008000",
    wrap="word", 
    width=64,
    undo=True, # Tk 8.4
    )

然而,我无法让它发挥作用。我没有错,但字体仍然是Calibri。我在互联网上搜索可能允许我动态更改文本画布字体的任何内容,但我没有成功找到一个有效的字体。任何帮助实现字体修改功能都将非常感激。

我正在使用python 2.7.7,Tkinter,我在Windows 7上运行它。

2 个答案:

答案 0 :(得分:1)

您的函数应将字体名称更改为"Times New Roman"。你确定要调用这个函数吗?

为了完整性,正如 Bryan Oakley 所述,在指定具有多个单词的字体名称时应使用元组语法(就像我在下面的示例中所做的那样)。

如果可以通过单击按钮动态更改Text窗口小部件的字体,那么以下内容可能是一个使用Toplevel窗口小部件的简单解决方案用户编写字体和大小:

import Tkinter as tk


def choose_font():
    global m, text # I hate to use global, but for simplicity

    t = tk.Toplevel(m)
    font_name = tk.Label(t, text='Font Name: ')
    font_name.grid(row=0, column=0, sticky='nsew')
    enter_font = tk.Entry(t)
    enter_font.grid(row=0, column=1, sticky='nsew')
    font_size = tk.Label(t, text='Font Size: ')
    font_size.grid(row=1, column=0, sticky='nsew')
    enter_size = tk.Entry(t)
    enter_size.grid(row=1, column=1, sticky='nsew')

    # associating a lambda with the call to text.config()
    # to change the font of text (a Text widget reference)
    ok_btn = tk.Button(t, text='Apply Changes',
                       command=lambda: text.config(font=(enter_font.get(), 
                       enter_size.get())))
    ok_btn.grid(row=2, column=1, sticky='nsew')

    # just to make strechable widgets
    # you don't strictly need this
    for i in range(2):
        t.grid_rowconfigure(i, weight=1)
        t.grid_columnconfigure(i, weight=1)
    t.grid_rowconfigure(2, weight=1)


m = tk.Tk()
text = tk.Text(m)
text.pack(expand=1, fill='both')
chooser = tk.Button(m, text='Choose Font', command=choose_font)
chooser.pack(side='bottom')

tk.mainloop()

单击Choose Font时,会显示另一个窗口,您可以在其中插入字体名称和字体大小。您可以通过点击使用lambda的其他按钮Apply Changes来应用新的字体名称和字体大小。

请注意,我没有处理任何可能的错误输入(例如插入大小的字母),您可以自己做。

答案 1 :(得分:1)

问题是如何指定字体。你应该使用元组而不是字符串。试试这个:

font = (fontname, size)
textPad.config(
    ...,
    font=font,
    ...
)

tkinter文档的好地方是effbot.org。在关于widget styling的页面上,它说明了指定字体:

  

请注意,如果系列名称包含空格,则必须使用元组   语法如上所述。