在tkinter中的帧之间切换

时间:2018-10-13 04:52:02

标签: python 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()

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

1 个答案:

答案 0 :(得分:0)

获得具有堆叠框架的布局的本质是使框架彼此重叠。您可以通过在相同位置将框架网格化来实现。 要观察提升操作,您需要在每个帧中放置一个小部件。

这是一个简单的示例,其中控制按钮包装在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

可以在此处找到帧切换和相关信息的详细示例 Switch between two frames in tkinter