我正在Python 2.7中编写一个Tkinter应用程序,但我遇到了一些我以前没有遇到的麻烦。从我所知道的情况来看,Tkinter模块看起来像是在我的课程中为__init__
函数导入的,但不适用于其他函数。下面是我的本钱简化版本:Tkinter导入时出错
from Tkinter import *
class App:
def __init__(self):
self.master = Tk()
self.window = Frame(self.master)
self.window.grid()
self.BuildFrames()
self.master.mainloop()
def BuildFrames(self):
frames = []
frames.append(Frame(self.window,borderwidth=2,padx=10,pady=10))
# more code follows...
for Frame in frames:
Frame.grid()
App()
当我运行它,我得到以下错误:
Traceback (most recent call last):
File "myApp.py", line 131, in <module>
App()
File "myApp.py", line 12, in __init__
self.BuildFrames()
File "myApp.py", line 26, in BuildFrames
frame1 = Frame(self.window,borderwidth=2,padx=10,pady=10)
UnboundLocalError: local variable 'Frame' referenced before assignment
从我所知道的,Frame
功能不被认可作为BuildFrames()
函数中的Tkinter方法。如何在__init__
中识别,但不在BuildFrames
内?
我可以通过改变进口来解决这个问题:
import Tkinter as Tk
,然后在所有的Tkinter方法前添加Tk.
,但宁愿避免它(我不应该这样做无论如何!)
我一定错过了一些关于导入方式的大作,但是我可以发誓,这种相同类型的代码已经为我工作过。有人能帮我解决这个问题吗?
我相当积极,我没有在我的代码中的任何'框架'的其他定义。有什么可能导致导入无法在班级的所有模块中被识别? – user1636547
@ user1636547,你能展示完整的'BuildFrames'代码吗? – falsetru
找到了错误......事实证明,我在后面的'BuildFrames'中的迭代器中使用了一个变量'Frame'。我将发布代码作为答案。 – user1636547