在tkinter框架之间移动

时间:2018-12-20 17:42:31

标签: python-3.x oop tkinter

我有一个主页,其中有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”。

1 个答案:

答案 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())