【问题标题】:Move between tkinter frames在 tkinter 帧之间移动
【发布时间】:2018-12-20 17:42:30
【问题描述】:

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

【问题讨论】:

  • 将你的帧存储在一个列表中,然后你可以根据索引加载它们。或者您可以使用 show_frame 方法通过按钮抬起您需要的框架。

标签: python-3.x oop tkinter


【解决方案1】:

您可以将当前显示的帧保存在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

然后修改Converter页面中Back按钮的command选项:

button1 = ttk.Button(self, text="Back", command=lambda: controller.show_frame())

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-17
    • 1970-01-01
    • 2022-12-12
    • 2020-05-18
    • 2015-02-18
    • 1970-01-01
    • 2020-10-10
    • 2011-11-24
    相关资源
    最近更新 更多