繁体   English   中英

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

[英]How can i drag and drop multiple widgets at the same time i can drag my labels but want to drag them at the same time

from tkinter import *

def vp_start_gui():
    root = Tk()
    top = Toplevel1 (root)

root.mainloop()

class Toplevel1:
    def __init__(self, top=None):

        top.geometry("300x300")

我使用了你所有的功能,它们的工作方式和你的方式一样好,但是如果我把它说成 class 就不能正常工作

如果我 select 单独跳跃大约半个屏幕 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()

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

这是 function。

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, '+')

如何使用它?

可以使用来自此 function 的不同小部件创建多个集合。 你可以从下面的这个例子中得到一个想法,移动每个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()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM