我有一种感觉,这将以facepalm结束,但我不能解释为什么这个import x from y
场景不适合我。作为起点,请使用以下模块main.py
:
import Tkinter as tk
import tkFont
__metaclass__ = type
#Create widgets
root = tk.Tk()
fntPlainText = tkFont.Font(family='Courier New',size=10)
lblDisplay = tk.Label(root, relief=tk.SUNKEN,
font=fntPlainText,
width=30,height=5,
text='This is a test!')
#Do layout
lblDisplay.grid(padx=5,pady=5)
#Begin app
tk.mainloop()
这正常运行,并提出一个包含预期内容的小标签:
所以现在我想将这个Font
对象的定义移动到一个单独的模块,所以我可以在多个应用程序之间共享它。我更新的代码模块是fonts1.py
:
import Tkinter as tk
import tkFont
__metaclass__ = type
fntPlainText = tkFont.Font(family='Courier New',size=10)
...和main1.py
:
import Tkinter as tk
from fonts1 import fntPlainText
__metaclass__ = type
#Create widgets
root = tk.Tk()
lblDisplay = tk.Label(root, relief=tk.SUNKEN,
font=fntPlainText,
width=30,height=5,
text='This is a test!')
#Do layout
lblDisplay.grid(padx=5,pady=5)
#Begin app
tk.mainloop()
但是当我运行main1.py
时,我得到一个追溯:
Traceback (most recent call last):
File "G:\Python\experiments\investigations\tk\main1.py", line 2, in <module>
from fonts1 import fntPlainText
File "G:\Python\experiments\investigations\tk\fonts1.py", line 5, in <module>
fntPlainText = tkFont.Font(family='Courier New',size=10)
File "C:\Python27\lib\lib-tk\tkFont.py", line 89, in __init__
tk.call("font", "create", self.name, *font)
AttributeError: 'NoneType' object has no attribute 'call'
从谷歌搜索和实验中,我发现足以知道fntPlainText
的分配出了问题,但(再次)我无法弄清楚它是什么。整个情况的最大难题是当我削减fonts1.py
以简单地将fntPlainText
定义为元组时 -
修改后的fonts1.py
:
fntPlainText = ('Courier New',10)
现在正在运行main1.py
正常完成并绘制与main.py
相同的窗口。
如果重要,环境是在Windows 7上运行的Python 2.7.x.
答案 0 :(得分:2)
您需要在创建字体之前创建根窗口(tk.Tk())。如果你移动
jsonb
在tk.Tk()调用下方它应该按预期工作。