我試圖通過使用多個框架將matplotlib併入到tkinter中。一旦點擊了StartPage
中的按鈕,我需要通過StartPage
框架的輸入輸入來更新GraphPage
中的圖。因此,我試圖將GraphPage
的更新函數綁定到StartPage
中的按鈕,但更新函數需要self
參數,這是我無法得到的。這裏是我的代碼的設立現在:如何將一個類的「自我」參數傳遞給另一個類
import matplotlib
matplotlib.use("TkAgg")
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2TkAgg
from matplotlib.figure import Figure
import tkinter as tk
from tkinter import ttk
class PeakFitting(tk.Tk):
def __init__(self, *args, **kwargs):
tk.Tk.__init__(self, *args, **kwargs)
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 = {}
for F in (StartPage, GraphPage):
frame = F(container, self)
self.frames[F] = frame
frame.grid(row=0, column=0, sticky="nsew")
self.show_frame(StartPage)
def show_frame(self, cont):
frame = self.frames[cont]
frame.tkraise()
def get_page(self, classname):
'''Returns an instance of a page given it's class name as a string'''
for page in self.frames.values():
if str(page.__class__.__name__) == classname:
return page
return None
class StartPage(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
self.controller = controller
# Setting up frame and widget
self.entry1 = tk.Entry(self)
self.entry1.grid(row=4, column=1)
button3 = ttk.Button(self, text="Graph Page",
command=self.gpUpdate())
button3.grid(row=7, columnspan=2)
def gpUpdate(self):
graphPage = self.controller.get_page("GraphPage")
GraphPage.update(graphPage)
self.controller.show_frame("GraphPage")
class GraphPage(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
self.controller = controller
fig = Figure(figsize=(5, 5), dpi=100)
self.a = fig.add_subplot()
canvas = FigureCanvasTkAgg(fig, self)
canvas.show()
canvas.get_tk_widget().pack(side=tk.BOTTOM, fill=tk.BOTH, expand=True)
toolbar = NavigationToolbar2TkAgg(canvas, self)
toolbar.update()
canvas._tkcanvas.pack(side=tk.TOP, fill=tk.BOTH, expand=True)
startpage = self.controller.get_page("StartPage")
def update(self):
startpage = self.controller.get_page("StartPage")
self.iso = startpage.entry1.get()
##Calculation code for analysis not needed for question
app = PeakFitting()
app.mainloop()
爲gpUpdate
功能StartPage
,我試圖通過graphPage
爲self
,卻得到了一個錯誤,這是一個NoneType
。我也嘗試GraphPage.update(GraphPage)
,但得到'類型對象'GraphPage'沒有屬性'控制器''錯誤。
如果我的解釋不清楚,我非常抱歉,但我對Python很新,並且一直在掙扎幾個星期,以便在點擊按鈕後將條目傳遞給GraphPage類,但仍然無法完成...任何人都可以請幫我解決這個問題嗎?
非常感謝你!
編輯:我想我的主要問題是如何調用一個類的功能在另一個類,因爲我不知道self
參數應該是什麼:(
EDIT2:更改感謝建議代碼:
def gpUpdate(self):
self.parent = PeakFitting()
self.grpage = GraphPage(self.parent.container, self.parent)
self.grpage.update()
self.controller.show_frame(GraphPage)
然而,當我輸入東西的條目,並按下按鈕時,self.iso
場仍然爲空...
可能重複的[tkinter中兩幀之間切換](http://stackoverflow.com/questions/7546050/switch-between-two-frames-in-tkinter) –
@ParvizKarimli該帖子告訴我如何切換我已經做過的幀...這是從另一幀調用一個幀的功能,我有問題:( –