Python 2.7 で Tkinter アプリを作成していますが、これまで経験したことのない問題に直面しています。私が知る限り、Tkinter モジュールは__init__
クラス内の関数に対してインポートされているようですが、他の関数に対してはインポートされていないようです。これが私が持っているものの簡略化されたバージョンです:
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
関数は関数内の Tkinter メソッドとして認識されていませんBuildFrames()
。一体どうやってそれを認識できたのに、内部では認識でき__init__
なかったのですBuildFrames
か???
インポートを次のように変更することで問題を解決できます。
import Tkinter as Tk
そして、Tk.
すべての Tkinter メソッドの前に a を追加しますが、むしろそれを避けたいと思います (とにかくこれを行う必要はありません!)
インポートが機能する方法について何か大きなことを見逃しているに違いありませんが、これと同じタイプのコードが以前に機能していたことを断言できます。誰かがこれで私を助けることができますか?