ウィジェットは階層内に存在し、すべてのウィジェットはその親によって視覚的にクリップされます。異なる時間に異なるフレームにウィジェットを表示したいので、それは単にどちらのフレームの子になることはできません。代わりに、それをフレームの親の子にします。 (または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」クラスを作成し、それを使って系統(親/子供)を維持することでした。そうすれば、すべてのオブジェクトを直接親にルートすることができ、親の外に移動するように見えるようになります。 –
[このガイド](https://stackoverflow.com/help/mcve)に従って、** minimal **、** complete **、** verifiable **の例を提供できる場合。私は*試してみることができます。 –