我想從類的外部訪問在類FirstPage中定義的文本部件。 我試圖通過創建一個FirstPage的新實例來解決這個問題,但找不到要使用的正確參數。還嘗試使用GUI實例獲取訪問權限,但未成功。Python Tkinter,從類外修改文本
我可以從類的外部使用text.insert(0.0,t)來解決我的問題。它可以幫助我修改與Tkinter顯示的文本不直接與GUI相關的函數。
我試圖使用代碼的來源發現: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()
編輯: 這裏是工作代碼:
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()
謝謝你的答案布賴恩!我想問一個不同的問題(我不想通過使用不同的頁面來修改文本,而是從與GUI無關的其他函數中修改文本。)例如,讀入.txt文件並在FirstPage上顯示內容。我將編輯我的問題更具體,但首先會嘗試找出代碼中的OOP理論,因爲我仍然很困惑。 – additive
@additive:這個答案仍然適用。你可以從代碼的任何其他部分執行'app.get_page(「FirstPage」)。text.insert(...)'。 –
是的!謝謝你,你真的很有幫助!它現在有效。 也只是說,def get_page(self,page_name) - 自我缺少,並在def some_function需要self.text – additive