我正在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