如何同时拖放多个小部件 我可以拖动标签但想同时拖动它们


from tkinter import *
def vp_start_gui():
root = Tk()
top = Toplevel1 (root)
root.mainloop()
class Toplevel1:
def __init__(self, top=None):
top.geometry("300x300")

我使用你所有的功能,它们以你的方式工作得很好,但如果我把它放在一个类上

,效果很好如果我单独选择,它会跳大约半个屏幕 def select_and_drag(widgets_list(: ""将所有小部件拖在一起 在给定的列表中,鼠标点。

Args:
widgets_list (list, tuple): Takes list of widgets 
to be moved together."""
def set_drag(evt):
"""Set iniitial points."""
for w in widgets_list:
w._drag_x = evt.x 
w._drag_y = evt.y
def on_drag(evt):
"""Drags with mouse."""
for w in widgets_list:
x = w.winfo_x() - w._drag_x + evt.x
y = w.winfo_y() - w._drag_y + evt.y
w.place(x=x, y=y)
for wid in widgets_list:
wid.bind("<Button-1>", set_drag, '+')
wid.bind("<B1-Motion>", on_drag, '+')
self.Label1_3 = Label(top)
self.Label1_3.place(relx=0.687, rely=0.183, height=36, width=124)
self.Label1_3.configure(text='''Height''', bg="brown")
self.Label1 = Label(top, text="try")
self.Label1.pack()
select_and_drag((self.Label1_3, self.Label1))
select_and_drag((self.Label1,))
if __name__ == '__main__':
vp_start_gui()

是的,这是可能的,你几乎在那里你的代码。我刚刚修改并改进了您的拖动功能,我创建了一个函数select_and_drag(widget_list)它接受小部件列表并将它们组合在一起,这意味着移动一个小部件将使该集合中的所有小部件一起移动。

这是函数。

def select_and_drag(widgets_list):
"""Drags all the widgets together 
in the given list with mouse point.
Args:
widgets_list (list, tuple): Takes list of widgets 
to be moved together."""
def set_drag(evt):
"""Set iniitial points."""
for w in widgets_list:
w._drag_x = evt.x 
w._drag_y = evt.y
def on_drag(evt):
"""Drags with mouse."""
for w in widgets_list:
x = w.winfo_x() - w._drag_x + evt.x
y = w.winfo_y() - w._drag_y + evt.y
w.place(x=x, y=y)
for wid in widgets_list:
wid.bind("<Button-1>", set_drag, '+')
wid.bind("<B1-Motion>", on_drag, '+')

如何使用?

可以使用此函数的不同小部件创建多个集合。您可以从下面的这个例子中得到一个想法,移动每个SET并亲自查看。

from tkinter import *
root  = Tk()
root.geometry("600x350")
# SET 1
lbl1 = Label(root, text='SET1', fg='red')
lbl1.pack()
lbl2 = Label(root, text='SET1', fg='red')
lbl2.pack()
# Common for SET1 and SET3
lbl3 = Label(root, text='SET1 and SET3', 
bg='pink', fg='red') 
lbl3.pack()
# SET2
lbl4 = Label(root, text='SET2', bg='lightblue')
lbl4.pack()
lbl5 = Label(root, text='SET2', bg='lightblue')
lbl5.pack()
# SET2
lbl6 = Label(root, text='SET3', bg='pink')
lbl6.pack()
# Make SETS.
select_and_drag((lbl1, lbl2, lbl3))
select_and_drag((lbl4, lbl5))
select_and_drag((lbl3, lbl6))
root.mainloop()

最新更新