我正在尝试使用tkinter拖放来移动按钮。 问题是,当我试图移动我的按钮时,它正在工作,但我不能将它移到他的父母之外: 我有一个LabelFrame,其中包含几个带按钮的LabelFrame。我正在尝试将一个按钮从LabelFrame拖放到另一个按钮,但是当按钮移出其父级时,它会“消失”。 我正在使用窗口小部件的方法“放置”来拖动它。
我不确定我的问题是否真的可以理解。如果不能更好地解释它,我会提供一些代码。
答案 0 :(得分:4)
小部件存在于层次结构中,每个小部件都将由其父级进行可视化裁剪。由于您希望窗口小部件在不同的时间出现在不同的帧中,因此它不能是任何帧的子帧。相反,使它成为帧的父级的子级。然后,您可以使用place
(或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()