我试图通过使用多个框架将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该帖子告诉我如何切换我已经做过的帧...这是从另一帧调用一个帧的功能,我有问题:( –