Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 2.7 无法在python Tkinter文本编辑器中动态更改字体_Python 2.7_Fonts_Tkinter_Text Editor - Fatal编程技术网

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

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

最近我一直在开发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。我在互联网上搜索过任何可以让我动态改变文本画布字体的东西,但我没有找到一个有效的。如果您能帮助实现字体修改功能,我们将不胜感激


我使用的是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就是一个例子。我计划扩展它,这样我就可以将文本更改为各种字体。还有,是的,我确定我进入了菜单配置,然后更改了字体。