【发布时间】:2020-10-09 22:45:18
【问题描述】:
我需要一起添加几个小部件,然后将它们拖放到一起。我想的第一种方法是将所有小部件放在一个框架中,然后拖放并拖动框架。但是有一个问题是frame在widgets下面,不能被选中。
【问题讨论】:
标签: tkinter menu drag-and-drop widget frame
我需要一起添加几个小部件,然后将它们拖放到一起。我想的第一种方法是将所有小部件放在一个框架中,然后拖放并拖动框架。但是有一个问题是frame在widgets下面,不能被选中。
【问题讨论】:
标签: tkinter menu drag-and-drop widget frame
from tkinter import *
WIDTH, HEIGTH = 300, 300
root = Tk()
def do_popup(event):
try:
m.tk_popup(event.x_root, event.y_root)
finally:
m.grab_release()
root.geometry('{}x{}'.format(WIDTH, HEIGTH))
f1=Frame(root)
def make_draggable(widgets):
for widget in widgets:
widget.bind("<Button-1>", lambda event, arg=widgets: on_drag_start(event, arg))
widget.bind("<B1-Motion>", on_drag_motion)
widget.bind("<ButtonRelease-1>", lambda event, arg=widgets: disaable_bind(event, arg))
def on_drag_start(event,widgets):
widget = event.widget
widget = f1
widget._drag_start_x = event.x
widget._drag_start_y = event.y
# for widget in widgets:
# widget.bind("<ButtonRelease-1>", disaable_bind(widgets))
def on_drag_motion(event):
widget = event.widget
widget = f1
x = widget.winfo_x() - widget._drag_start_x + event.x
y = widget.winfo_y() - widget._drag_start_y + event.y
widget.place(x=x, y=y)
def disaable_bind(event,widgets):
print('disaable_bind')
for widget in widgets:
widget.unbind("<Button-1>")
widget.unbind("<B1-Motion>")
widget.unbind("<ButtonRelease-1>")
m = Menu(root, tearoff=0)
m.add_command(label="drop and drag", command= lambda: make_draggable([b1,l1]))
m.add_command(label="Copy")
m.add_command(label="Paste")
m.add_command(label="Reload")
m.add_separator()
m.add_command(label="Rename")
l1 = Entry(f1)
b1 = Listbox(f1)
b1.bind("<Button-3>", do_popup)
# b1.place(bordermode=OUTSIDE)
b1.grid(row = 0,column = 0)
l1.grid(row = 1,column = 0)
f1.grid(row = 0,column = 0)
# make_draggable(f1)
root.mainloop()
【讨论】: