クラス外からFirstPageクラスで定義されたTextウィジェットにアクセスしようとしています。 FirstPageの新しいインスタンスを作成してこの問題を解決しようとしましたが、使用する正しい引数が見つかりませんでした。また、GUIのインスタンスを使用してアクセスを取得しようとしましたが、失敗しました。Python Tkinter、クラス外のテキストを変更する
私の問題は、クラスの外側からtext.insert(0.0、t)を使用すると解決されます。 GUIに直接関係しない関数によって、Tkinterで表示されるテキストを変更するのに役立ちます。
私が使用しようとしていますコードの起源が発見された:Switch between two frames in tkinter
はまた、私はこの質問のために必要ではありませんでした行を削除。..
import Tkinter as tk
class GUI(tk.Tk):
def __init__(self, *args, **kwargs):
tk.Tk.__init__(self, *args, **kwargs)
tk.Tk.geometry(self, '580x410')
container = tk.Frame(self)
container.pack(side="top", fill="both", expand=True)
container.grid_rowconfigure(0, weight=1)
container.grid_columnconfigure(0, weight=1)
self.frames = {}
frame = FirstPage(container, self)
self.frames[FirstPage] = frame
frame.grid(row=0, column=0, sticky="nsew")
frame = self.frames[FirstPage]
frame.tkraise()
class FirstPage(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
text = tk.Text(self , height=25, width=80)
text.grid(column=0, row=0, sticky="nw")
app = GUI()
app.mainloop()
はEDIT:ここでは があります作業コード:
import Tkinter as tk
class GUI(tk.Tk):
def __init__(self, *args, **kwargs):
tk.Tk.__init__(self, *args, **kwargs)
tk.Tk.geometry(self, '580x410')
container = tk.Frame(self)
container.pack(side="top", fill="both", expand=True)
container.grid_rowconfigure(0, weight=1)
container.grid_columnconfigure(0, weight=1)
self.frames = {}
frame = FirstPage(container, self)
self.frames[FirstPage] = frame
frame.grid(row=0, column=0, sticky="nsew")
frame = self.frames[FirstPage]
frame.tkraise()
page_name = FirstPage.__name__
self.frames[page_name] = frame
def get_page(self, page_name):
return self.frames[page_name]
class FirstPage(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
self.text = tk.Text(self , height=25, width=80)
self.text.grid(column=0, row=0, sticky="nw")
app = GUI()
app.get_page("FirstPage").text.insert("1.0", "Hello, world")
app.mainloop()
回答ありがとうBryan!私は別の質問をしてみようとしていました(別のページを使ってテキストを変更するのではなく、GUIに関連しない他の機能からテキストを変更したい)。たとえば、.txtファイルを読み込んでFirstPageに内容を表示します。より具体的に私の質問を編集しますが、最初はこのコードのOOP理論を理解しようとしますが、それはまだそれと非常に混同されているからです。 – additive
@additive:この回答はまだ適用されます。コードの他の部分から 'app.get_page(" FirstPage ")。text.insert(...)'を実行することができます。 –
はい!ありがとう、本当に役に立ちました!それは今働く。 また、get_page(self、page_name) - selfが見つからず、defのsome_functionがself.textである必要があると言っているだけです。 – additive