Python 如何在笔记本tkinter中将标签从一个选项卡移动到另一个选项卡?

Python 如何在笔记本tkinter中将标签从一个选项卡移动到另一个选项卡?,python,python-3.x,tkinter,tkinter-canvas,Python,Python 3.x,Tkinter,Tkinter Canvas,我开始了解Tkinter,但在我进行实验和练习时,我被困在了一个点上;我不知道如何在tkinter笔记本中将tkinter元素(如框架或标签)从一个选项卡移动到另一个选项卡。 一个足智多谋的链接或一个关于我的问题的答案将非常有用 附言:这是我第一次问问题,所以如果我做错了什么,我会向你道歉。在框架之间移动小部件是很不寻常的。通常,删除旧的小部件并在新位置创建一个新的小部件是最简单的。但是,可以移动小部件,尽管有一些限制 小部件以树状结构存在,根窗口作为树的开始。除了根窗口,所有其他小部件都有一个

我开始了解Tkinter,但在我进行实验和练习时,我被困在了一个点上;我不知道如何在tkinter笔记本中将tkinter元素(如框架或标签)从一个选项卡移动到另一个选项卡。 一个足智多谋的链接或一个关于我的问题的答案将非常有用


附言:这是我第一次问问题,所以如果我做错了什么,我会向你道歉。

在框架之间移动小部件是很不寻常的。通常,删除旧的小部件并在新位置创建一个新的小部件是最简单的。但是,可以移动小部件,尽管有一些限制

小部件以树状结构存在,根窗口作为树的开始。除了根窗口,所有其他小部件都有一个父窗口。您无法将小部件移动到树的不同分支,因此要从一个帧移动到另一个帧,两个帧加上标签需要具有相同的父帧

通常,当使用
pack
place
grid
时,小部件将被放置在其父部件中。您可以通过在参数中使用
来更改该值

下面的示例说明了该技术。请注意,要移动的标签(
the_label
)是笔记本的子项,而不是其中一个选项卡的子项,我们使用
中的
参数指定哪个帧应该有标签

import tkinter as tk
from tkinter import ttk

def moveToOne():
    the_label.pack(in_=tab1, expand=True, padx=20, pady=20)

def moveToTwo():
    the_label.pack(in_=tab2, expand=True, padx=20, pady=20)

root = tk.Tk()

notebook = ttk.Notebook(root)
toolbar = ttk.Frame(root)

toolbar.pack(side="top", fill="x")
notebook.pack(side="top", fill="both", expand=True)

tab1 = ttk.Frame(notebook)
tab2 = ttk.Frame(notebook)
notebook.add(tab1, text="Tab 1")
notebook.add(tab2, text="Tab 2")

the_label = tk.Label(notebook, text="Click a button to move me")

b1 = tk.Button(toolbar, text="Move to tab 1", command=moveToOne)
b2 = tk.Button(toolbar, text="Move to tab 2", command=moveToTwo)
b1.pack(side="left")
b2.pack(side="left")

# initialize it to be on the first tab
moveToOne()

root.mainloop()

在帧之间移动小部件是相当不寻常的。通常,删除旧的小部件并在新位置创建一个新的小部件是最简单的。但是,可以移动小部件,尽管有一些限制

小部件以树状结构存在,根窗口作为树的开始。除了根窗口,所有其他小部件都有一个父窗口。您无法将小部件移动到树的不同分支,因此要从一个帧移动到另一个帧,两个帧加上标签需要具有相同的父帧

通常,当使用
pack
place
grid
时,小部件将被放置在其父部件中。您可以通过在
参数中使用
来更改该值

下面的示例说明了该技术。请注意,要移动的标签(
the_label
)是笔记本的子项,而不是其中一个选项卡的子项,我们使用
中的
参数指定哪个帧应该有标签

import tkinter as tk
from tkinter import ttk

def moveToOne():
    the_label.pack(in_=tab1, expand=True, padx=20, pady=20)

def moveToTwo():
    the_label.pack(in_=tab2, expand=True, padx=20, pady=20)

root = tk.Tk()

notebook = ttk.Notebook(root)
toolbar = ttk.Frame(root)

toolbar.pack(side="top", fill="x")
notebook.pack(side="top", fill="both", expand=True)

tab1 = ttk.Frame(notebook)
tab2 = ttk.Frame(notebook)
notebook.add(tab1, text="Tab 1")
notebook.add(tab2, text="Tab 2")

the_label = tk.Label(notebook, text="Click a button to move me")

b1 = tk.Button(toolbar, text="Move to tab 1", command=moveToOne)
b2 = tk.Button(toolbar, text="Move to tab 2", command=moveToTwo)
b1.pack(side="left")
b2.pack(side="left")

# initialize it to be on the first tab
moveToOne()

root.mainloop()

这里的用户将帮助您,但不会为您编写全部内容。添加你的代码和它有什么问题,我们可以帮助后。请参阅并使用
中的
参数将它们简单地打包到新框架中。ie
label\u instance.pack(在
的新框架中)。如果你也想从旧框架中删除它们,请先调用
label\u instance.pack\u forget()
。如果你使用的是
grid
place
@Novel:你不必调用
pack\u forget()
。一个小部件一次只能在一个地方,因此当它被添加到一个新的地方时,它会自动从旧的地方删除。谢谢@Nic3500,我将从现在开始添加我的代码!现在工作正常!谢谢@NovelUsers在这里会帮助你,但不会为你编写全部内容。添加你的代码,以及有什么问题,我们可以在之后提供帮助。see并使用
in
参数将它们简单地打包到新框架中。即
label\u instance.pack(in=new\u Frame
。如果您也想将它们从旧框架中删除,请先调用
label\u instance.pack\u forget()
。如果您使用的是
grid
place
@Novel:您不必调用
pack\u forget()
。一个小部件一次只能在一个地方,因此当它被添加到一个新的地方时,它会自动从旧的地方删除。谢谢@Nic3500,我将从现在开始添加我的代码!现在工作正常!谢谢@NovelThank先生!代码真的解释了我想要理解的内容。:)谢谢你,先生!代码真的解释了我想要理解的东西。:)