我有一个主页,其中有8个不同的框架。在每个框架中都有一个后退按钮,可将框架引导至主页。我还有一个转换器框架,该框架执行所有框架中需要的一些数学运算。在转换器框架中还有一个后退按钮,但后退按钮再次将框架引向主页。我想从转换器框架返回到上一帧而不是主页。
import tkinter as tk
from tkinter import ttk
class Application(tk.Tk):
def __init__(self):
tk.Tk.__init__(self)
tk.Tk.wm_title(self, "Geodesic Calculations")
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, A_section, B_section, C_section, D_section,
E_section, F_section, G_section, H_section, Converter):
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()
return frame
A部分:(8帧之一)
class A_section(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
btton = ttk.Button(self, text="Converter",
command=lambda: controller.show_frame(Converter))
btton.grid(row=0, column=5)
button1 = ttk.Button(self, text="Back",
command=lambda: controller.show_frame(StartPage))
button1.grid(row=0, column=0)
转换器框架:
class Converter(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
button1 = ttk.Button(self, text="Back",
command=lambda: controller.show_frame(StartPage))
button1.grid(row=0, column=0)
例如,当我进入A节时,我想使用转换器,进行计算,然后使用转换器框架中的“后退”按钮返回到A节。但是转换器框架中的后退按钮返回首页,而不是A节。如代码所示,在转换器类中,有一个“返回”按钮将框架引向主页,我该如何更改代码的“ controller.show_frame(StartPage)”部分,因此在括号中应该有我要返回的节名称,而不是“ StartPage”。
答案 0 :(得分:2)
您可以将当前显示的帧保存在show_frame()
中,并以show_frame()
作为cont
来调用None
时显示保存的帧。以下是修改后的show_frame()
:
def show_frame(self, cont=None):
if cont is None:
# show last frame
cont = self.lastcont
frame = self.frames[cont]
frame.tkraise()
if cont != Converter:
self.lastcont = cont
然后修改command
页面中Back
按钮的Converter
选项:
button1 = ttk.Button(self, text="Back", command=lambda: controller.show_frame())