【发布时间】:2014-10-29 13:24:08
【问题描述】:
在函数内部和脚本主体中定义字体似乎表现不同,我似乎无法弄清楚它应该如何工作。
例如,本例中的Label 最终会使用更大的字体,正如预期的那样:
from Tkinter import *
from ttk import *
import tkFont
root = Tk()
default = tkFont.Font(root=root, name="TkTextFont", exists=True)
large = default.copy()
large.config(size=36)
style = Style(root)
style.configure("Large.TLabel", font=large)
root.title("Font Test")
main_frame = Frame(root)
Label(main_frame, text="Large Font", style="Large.TLabel").pack()
main_frame.pack()
root.mainloop()
但是,如果我尝试在函数中定义样式,字体似乎被删除或被垃圾收集,并且在小部件需要使用它时不可用:
from Tkinter import *
from ttk import *
import tkFont
def define_styles(root):
default = tkFont.Font(root=root, name="TkTextFont", exists=True)
large = default.copy()
large.config(size=36)
style = Style(root)
style.configure("Large.TLabel", font=large)
root = Tk()
root.title("Font Test")
define_styles(root)
main_frame = Frame(root)
Label(main_frame, text="Large Font", style="Large.TLabel").grid(row=0, column=0)
main_frame.pack()
root.mainloop()
在main_frame.pack() 之前的第一个版本中打印出tkFont.names(),将自定义字体列为font<id>,但在第二个版本中打印相同的内容不会列出define_styles 函数之外的自定义字体。我必须做一些特别的事情来拯救他们吗?
为什么我不能将该代码放入函数中?我是否从根本上误解了字体应该如何使用? tkFont 似乎有某种字体注册表,为什么我的没有留下来?
【问题讨论】:
标签: python python-2.7 tkinter ttk