Можно ли перемещать Frame за дочерние объекты в нем?
Есть Frame в котором находится 3 лейбла, я делаю бинд, чтобы этот фрейм можно было перемещать мышкой. при помощи
def drag(event):
event.widget.place(x=event.x_root, y=event.y_root, anchor=CENTER)
frametime.bind("<B1-Motion>", drag)
За белое поле фрейма я могу перетаскивать весь фрейм, но при этом за дочерние объекты(лейблы, красного цвета) перетащить фрейм не получается, как сделать так чтобы я мог перетаскивать фрейм за дочерние объекты?
retag("alltime", frametime, timelabeltime, timelabelday,
timelabelmonth)
def drag(event):
event.widget.place(x=event.x_root, y=event.y_root,
anchor=CENTER)
root.bind_class("alltime", "<B1-Motion>", drag)
Ответы (1 шт):
Автор решения: Сергей Кох
→ Ссылка
Просто замените
def drag(event):
event.widget.place(
на
def drag(event):
frametime.place(
Пример реализации:
import tkinter
def drag(event):
frametime.place(x=event.x_root, y=event.y_root, anchor=tkinter.CENTER)
def retag(tag, *args):
'''Add the given tag as the first bindtag for every widget passed in'''
for widget in args:
widget.bindtags((tag,) + widget.bindtags())
tk = tkinter.Tk()
tk.geometry("{0}x{1}+0+0".format(tk.winfo_screenwidth(), tk.winfo_screenheight()))
frametime = tkinter.Frame(tk, bg="red", padx=20, pady=20)
a_label = tkinter.Label(frametime, text="A Label")
a_button = tkinter.Button(frametime, text="click me!")
frametime.pack()
a_label.pack()
a_button.pack()
retag("special", frametime, a_label, a_button)
tk.bind_class("special", "<B1-Motion>", drag)
tk.mainloop()
