最近我一直在研究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上运行它。
答案 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的页面上,它说明了指定字体:
请注意,如果系列名称包含空格,则必须使用元组 语法如上所述。