위젯은 계층 구조에 존재하며 모든 위젯은 부모에 의해 시각적으로 잘립니다. 위젯이 다른 시간에 다른 프레임에 나타나길 원하기 때문에, 위젯은 어느 프레임의 자식이 될 수 없습니다. 대신 프레임의 부모 자식으로 만듭니다. 그런 다음 (또는 pack
또는 grid
)을 사용하여 in_
매개 변수를 사용하여 위젯을 어느 프레임에 넣을 수 있습니다.
다음은 예입니다. 코드를 작게 유지하기 위해 드래그 앤 드롭을 사용하지 않지만 원리를 설명합니다. 한 프레임에서 다른 프레임으로 이동하려면 단추를 클릭하십시오.
import tkinter as tk
class Example:
def __init__(self):
self.root = tk.Tk()
self.lf1 = tk.LabelFrame(self.root, text="Choose me!", width=200, height=200)
self.lf2 = tk.LabelFrame(self.root, text="No! Choose me!", width=200, height=200)
self.lf1.pack(side="left", fill="both", expand=True)
self.lf2.pack(side="right", fill="both", expand=True)
self.button = tk.Button(self.root, text="Click me", command=self.on_click)
self.button.place(in_=self.lf1, x=20, y=20)
def start(self):
self.root.mainloop()
def on_click(self):
current_frame = self.button.place_info().get("in")
new_frame = self.lf1 if current_frame == self.lf2 else self.lf2
self.button.place(in_=new_frame, x=20, y=20)
Example().start()
직접 할 수 없습니다. 위젯은 부모가 차지하는 공간에 갇혀 있습니다. 위젯이 부모 가장자리에 닿았을 때이를 다른 부모 내부로 다시 그려 넣는 것을 감지 할 수있는 코드를 작성할 수는 있습니다. 그러나 이렇게하면 작은 작업에 천문학적 인 작업량이 필요할 것입니다 (누군가가 믿을 수 없을만큼 쉬운 방법을 알지 못한다면 이). –
저는 지난 몇 주 동안 Tkinter와 많은 일을 해왔습니다. 당신이 요구하는 것이 가능할 지 모르겠습니다. 부모는 내가 말할 수있는 것에서부터 본질적으로 아이들을 자릅니다. 내 해결 방법은 "GUIHolder"클래스를 만들고이를 사용하여 계보 (예 : 부모/자식)를 유지하는 것입니다. 그런 다음 모든 객체를 루트에 직접적으로 부모로 지정할 수 있으므로 부모가 아닌 외부로 이동하는 것처럼 보일 수 있습니다. –
[this guide] (https://stackoverflow.com/help/mcve)에 따라 ** minimal **, ** complete ** 및 ** verifiable ** 예제를 제공 할 수있는 경우. 나는 * 할 수 * 시도하고 함께 할 방법을 보여주기 위해 뭔가를 넣어. –