首页 > 解决方案 > 在 tkinter 中的帧之间切换

问题描述

虽然我知道以前有人问过这个问题,但是我尝试了帖子上的方法并没有成功。我试图通过单击按钮在 2 帧之间切换。到目前为止,这是我的代码:

from tkinter import *
window  = Tk()


nframe = Frame(window,width = 100,height = 100)
nframe.pack()
conjframe  = Frame(window,width = 100,height  = 100)
transframe = Frame(window,width = 100,height = 100)

window.geometry("100x100")


def raisenframe():
    nframe.tkraise()

def raiseconjframe():
    conjframe.tkraise()

def raisetransframe():
    transframe.tkraise()

def conj():
    print("this is a conjugator")
    conjframe.tkraise()
def trans():
    print("this is a translator")
    transframe.tkraise()
    transframe.pack()

Label(conjframe,text = 'hola').pack()
conjugator = Button(nframe, text="Conjugator", command=lambda:raiseconjframe)
conjugator.pack()

translator = Button(nframe, text="Translator", command=lambda:raisetransframe)
translator.pack()

raisenframe()
window.mainloop()

问题是当我单击按钮时,它似乎没有切换到任何其他帧,尽管我认为我已经正确完成了所有操作。有人可以帮我吗?

标签: pythontkinter

解决方案


获得具有堆叠框架的布局的本质是让框架位于彼此之上。您可以通过在同一位置网格化框架来实现此目的。要观察 raise 操作,您需要在每个框架中放置一个小部件。

这是一个简单的示例,控制按钮包含在 ROOT 框架和两个堆叠的框架中,它们的内容在一个单独的框架中相互叠加。

import tkinter as tk

ROOT = tk.Tk()

# seperate frame to hold frames stacked on top of each other
stacking_frame = tk.Frame()
stacking_frame.pack()

# two stacked frames within the stacking frame
conj_frame  = tk.Frame(master=stacking_frame)
conj_frame.grid(column=0, row=0)
trans_frame = tk.Frame(master=stacking_frame)
trans_frame.grid(column=0, row=0)

# example contents in each stacked frame
tk.Label(master=conj_frame,
         text='Conj').grid()
tk.Label(master=trans_frame,
         text='Trans').grid()

# buttons commands to alter stacking order
tk.Button(text="Raise Conjugator", command=conj_frame.tkraise).pack()
tk.Button(text="Raise Translator", command=trans_frame.tkraise).pack()

ROOT.mainloop()

可以在此处找到有关 tkinter 的有用介绍性信息https://tkdocs.com/tutorial/index.html

帧切换的详细示例和相关信息可以在这里找到 在tkinter中的两个帧之间切换


推荐阅读