私はPythonの初心者です。私は別のクラスで変数を使用すると問題があります。助けてください。 ここ異なるクラスの変数を使用する
import Tkinter as tk
class Page(tk.Frame):
def __init__(self, *args, **kwargs):
tk.Frame.__init__(self, *args, **kwargs)
def show(self):
self.lift()
class Page1(Page):
def __init__(self, *args, **kwargs):
Page.__init__(self, *args, **kwargs)
label = tk.Label(self, text="This is page 1")
label.pack(side="top", fill="both", expand=True)
entry = tk.Entry(self)
entry.pack()
class Page2(Page):
def __init__(self, *args, **kwargs):
Page.__init__(self, *args, **kwargs)
label = tk.Label(self, text="This is page 2")
label.pack(side="top", fill="both", expand=True)
text = tk.Text(self, entry.get())
root.after(...)
class MainView(tk.Frame):
def __init__(self, *args, **kwargs):
tk.Frame.__init__(self, *args, **kwargs)
p1 = Page1(self)
p2 = Page2(self)
buttonframe = tk.Frame(self)
container = tk.Frame(self)
buttonframe.pack(side="top", fill="x", expand=False)
container.pack(side="top", fill="both", expand=True)
p1.place(in_=container, x=0, y=0, relwidth=1, relheight=1)
p2.place(in_=container, x=0, y=0, relwidth=1, relheight=1)
b1 = tk.Button(buttonframe, text="Page 1", command=p1.lift)
b2 = tk.Button(buttonframe, text="Page 2", command=p2.lift)
b1.pack(side="left")
b2.pack(side="left")
p1.show()
if __name__ == "__main__":
root = tk.Tk()
main = MainView(root)
main.pack(side="top", fill="both", expand=True)
root.wm_geometry("400x400")
root.mainloop()
Using buttons in Tkinter to navigate to different pages of the application?からのサンプルコードは、次に、それは二つの問題があります:
NameError: global name 'entry' is not defined
NameError: global name 'root' is not defined
がどのように私はこれらの変数を使用できますか?助けてください!あなたは、あなたを見ることができるように
class Page1(Page):
def __init__(self, *args, **kwargs):
Page.__init__(self, *args, **kwargs)
self.label = tk.Label(self, text="This is page 1")
self.label.pack(side="top", fill="both", expand=True)
self.entry = tk.Entry(self)
self.entry.pack()
:
インポートが正しく機能していないかのようです。 Tkinterが正しくインストールされていることを確認してください。 –
なぜ私は多くのクラスが必要なのですか?変数エントリの場合は、Page1クラスの変数を宣言し、Page2クラスで使用します。変数がクラスにバインドされているので、このようなことは起こりません。本当にそうしたいのであれば、クラス変数としてエントリを宣言して、Page1.entryを使ってアクセスすることができます。 – DineshKumar
スコープの概念と、属性を取得する方法との違いを理解する必要があります。 – direprobs