当我运行此代码时:
from Tkinter import *
import tkFont
class Statify():
def __init__(self):
### Broken
self.titleFont = tkFont.Font(family='Helvetica', size=24, weight='bold')
self.option_add(*Label*font, self.titleFont)
###
self.root = Tk()
self.root.withdraw()
self.main = Toplevel(self.root)
self.main.title('')
self.main_header = Frame(self.main)
self.main_footer = Frame(self.main)
self.main_title = Label(self.main_header, text='Statify Me v1.0 (WIP)')
self.main_exit = Button(self.main_footer, text='Quit', command=quit)
self.main_header.pack()
self.main_footer.pack()
self.main_title.pack()
self.main_exit.pack()
mainloop()
statify = Statify()
我得到:
Traceback (most recent call last):
File "Statify.py", line 23, in <module>
statify = Statify()
File "Statify.py", line 7, in __init__
self.titleFont = tkFont.Font(family='Helvetica', size=24, weight='bold')
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk/tkFont.py", line 88, in __init__
AttributeError: 'NoneType' object has no attribute 'tk'
从我所阅读的内容来看,这应该可以工作,而使用选项文件并没有什么不同。
Python版本2.7.2
Tkinter版本8.5
最佳答案
如果查看docs for tkFont,您会发现问题在于tkFont.Font
需要root
参数-即父窗口小部件。通过将调用移至创建根窗口的位置下面的tkFont.Font
,然后将self.root
添加为关键字参数,可以解决此问题,如下所示:
self.root = Tk()
self.titleFont = tkFont.Font(root=self.root, family='Helvetica', size=24, weight='bold')
^^^^^^^^^^^^^^
您还没有遇到这个错误,但是下一行存在问题-我认为您打算编写
self.root.option_add
而不是self.option_add
,而且我不知道您打算如何处理*Label*font
业务。