Python 2.7 无法在python Tkinter文本编辑器中动态更改字体
最近我一直在开发GUI python纯文本编辑器。代码调用此函数:Python 2.7 无法在python Tkinter文本编辑器中动态更改字体,python-2.7,fonts,tkinter,text-editor,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( bor
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。我在互联网上搜索过任何可以让我动态改变文本画布字体的东西,但我没有找到一个有效的。如果您能帮助实现字体修改功能,我们将不胜感激
我使用的是Python2.7.7,Tkinter,我在Windows7上运行它 您的函数应该将字体名称更改为
“Times New Roman”
。您确定要调用该函数吗
为了完整起见,正如Bryan Oakley所说的,在使用多个单词指定字体名称时,应该使用元组语法(就像我在下面的示例中所做的那样)
如果可以通过单击按钮动态更改文本
小部件的字体,那么以下可能是一个简单的解决方案,它使用顶级
小部件让用户写入字体和大小:
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()
当您单击“选择字体”时,将显示另一个窗口,您可以在其中插入字体名称和字体大小。您可以通过单击另一个按钮来应用新的字体名称和字体大小,该按钮使用
请注意,我没有处理任何可能的错误输入(例如插入大小的字母),您可以自己处理。问题在于如何指定字体。您应该使用元组而不是字符串。试试这个:
font = (fontname, size)
textPad.config(
...,
font=font,
...
)
tkinter文档的好地方是effbot.org。在关于它的页面上,说明了有关指定字体的内容:
请注意,如果族名称包含空格,则必须使用元组
上面描述的语法
谢谢你的密码。然而,它所做的只是重新调整文本窗口的大小。文本的字体和实际大小没有改变。@对于我来说,它调整了
文本
小部件的字体大小。你确定你的代码完全相同吗?顺便问一下,你为什么要用画布?如果你发布了所有代码,我可以尝试提供更多帮助。谢谢你的回答和关于元组使用的解释。但是,这并不能解决问题。@笔名谜请发布您的所有代码,我将尝试解决问题。为了方便添加滚动条,我同时使用滚动文本和文本。您的代码适合我。您确定要进入菜单“配置”更改字体”
?发布代码时,最好在仍然能够重现问题的情况下删除尽可能多的代码。我们不需要函数cut、copy、pass、find、undo等来重现问题。如果您尽可能删除所有内容,同时仍保留一个具有您描述的行为的可运行程序,那么您的问题会更好。在您发布的代码中,我没有看到您试图将字体更改为“Times New Roman”的任何地方。Times New Roman就是一个例子。我计划扩展它,这样我就可以将文本更改为各种字体。还有,是的,我确定我进入了菜单配置,然后更改了字体。