Tkinter 将几个小部件拖放到一起?
我需要将几个小部件添加到一起,然后将它们拖放到一起。我的第一个想法是将所有小部件放在一个框架中,然后拖放框架。但存在一个问题,即框架位于小部件下,无法选择。Tkinter 将几个小部件拖放到一起?,tkinter,menu,drag-and-drop,widget,frame,Tkinter,Menu,Drag And Drop,Widget,Frame,我需要将几个小部件添加到一起,然后将它们拖放到一起。我的第一个想法是将所有小部件放在一个框架中,然后拖放框架。但存在一个问题,即框架位于小部件下,无法选择。来自tkinter import* from tkinter import * WIDTH, HEIGTH = 300, 300 root = Tk() def do_popup(event): try: m.tk_popup(event.x_root, event.y_root) finall
来自tkinter import*
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()
宽度,高度=300300
root=Tk()
def do_弹出窗口(事件):
尝试:
m、 tk_弹出窗口(event.x_root,event.y_root)
最后:
m、 抓斗释放()
几何体(“{}x{}.”格式(宽度、高度))
f1=帧(根)
def使_可拖动(小部件):
对于小部件中的小部件:
widget.bind(“,lambda事件,arg=widgets:on\u drag\u start(事件,arg))
widget.bind(“,在拖动运动时)
widget.bind(“,lambda事件,arg=widgets:disable_bind(事件,arg))
拖动启动时的def(事件、小部件):
widget=event.widget
widget=f1
widget.\u拖动\u开始\u x=event.x
widget.\u拖动\u开始\u y=event.y
#对于小部件中的小部件:
#widget.bind(“,不可禁用的绑定(widgets))
拖动运动时的def(事件):
widget=event.widget
widget=f1
x=widget.winfo\u x()-widget.\u拖动\u开始\u x+事件.x
y=widget.winfo\u y()-widget.\u拖动\u开始\u y+事件.y
widget.place(x=x,y=y)
def disable_bind(事件、小部件):
打印('disable_bind')
对于小部件中的小部件:
widget.unbind(“”)
widget.unbind(“”)
widget.unbind(“”)
m=菜单(根,tearoff=0)
m、 添加命令(label=“拖放”,command=lambda:make_draggable([b1,l1]))
m、 添加命令(label=“Copy”)
m、 添加命令(label=“粘贴”)
m、 添加命令(label=“Reload”)
m、 添加分隔符()
m、 添加命令(label=“Rename”)
l1=入口(f1)
b1=列表框(f1)
b1.绑定(“,do_弹出窗口)
#b1.地点(边界模式=外部)
b1.网格(行=0,列=0)
l1.网格(行=1,列=0)
f1.网格(行=0,列=0)
#使可拖动(f1)
root.mainloop()
这应该是答案吗?它似乎对我不起作用。通过对代码的注释或文本对您的答案进行解释总是很好的