在函數內部和腳本的主體中定義一個字體似乎行爲不同,我似乎無法弄清楚它應該如何工作。爲什麼我不能在函數中定義(並保存)Tkinter字體?
例如,在這個例子中,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()
在第一個版本打印輸出tkFont.names()
只是main_frame.pack()
列出了自定義字體爲font<id>
過,但打印相同的第二個版本沒有列出define_styles
功能外的自定義字體。我需要做一些特別的事情來拯救他們嗎?
爲什麼我不能將該代碼放入函數中?我從根本上誤解了一些關於字體應該如何使用的問題? tkFont
似乎有某種字體註冊表,爲什麼不是我的粘附?
它是有意義的,並且不固定的例子中(和較大的程序,促使在首位這個問題),如果一個比特不令人滿意。這是一個錯誤嗎?它可能缺少文檔,但是我可以從現在到永久填寫丟失的tkinter文檔錯誤。 – Collin 2014-09-04 17:50:13
我認爲它處於「錯誤」和「複雜系統的驚人相互作用」之間的灰色地帶。如果不需要這種手動引用保留,我會喜歡它,但是我知道開發人員有這樣一個很好的理由。 – Kevin 2014-09-04 18:04:12