繁体   English   中英

如何在 tkinter 中将多个项目从一个列表框移动到另一个列表框?

[英]How to move multiple items from one listbox to another in tkinter?

我正在尝试将多个项目从一个列表框移动到另一个。 我可以在一个列表框中 select 多个项目,但一次只能移动一个。 我曾尝试创建一个包含多个选定项目的列表,但正在徘徊是否有为此内置的东西? 任何帮助赞赏代码如下

from tkinter import *
from tkinter import ttk

my_window = Tk()

my_frame_in = Frame(my_window)
my_frame_in.grid(row=0, column=0)
my_frame_out = Frame(my_window)
my_frame_out.grid(row=0, column=1)

listbox_events = Listbox(my_frame_in, height='5', selectmode=EXTENDED)
listbox_events.grid(row=0, column=0, padx=10, pady=10)
listbox_events_filtered = Listbox(my_frame_out, height='5', selectmode=EXTENDED)
listbox_events_filtered.grid(row=0, column=2, padx=(0, 10), pady=10)
my_instructions = Label(my_window, text='Use arrow keys to move selected items')
my_instructions.grid(row=1, column=0, columnspan=3, pady=(0, 10))

my_list_events = ['A', 'B', 'C', 'D']

for item in my_list_events:
    listbox_events.insert(END, item)


def select_events(event=None):
    listbox_events_filtered.insert(END, listbox_events.get(ANCHOR))
    listbox_events.delete(ANCHOR)

def deselect_events(event=None):
    listbox_events.insert(END, listbox_events_filtered.get(ANCHOR))
    listbox_events_filtered.delete(ANCHOR)
# ref https://effbot.org/tkinterbook/tkinter-events-and-bindings.htm


listbox_events.bind('<Right>', select_events)
listbox_events_filtered.bind('<Left>', deselect_events)


mainloop()

您需要遍历第一个列表框中的选定项目并将它们插入到第二个列表框中。 我已经更新了您的代码以显示这一点。

from tkinter import *

my_window = Tk()

my_frame_in = Frame(my_window)
my_frame_in.grid(row=0, column=0)
my_frame_out = Frame(my_window)
my_frame_out.grid(row=0, column=1)

listbox_events = Listbox(my_frame_in, height='5', selectmode=EXTENDED)
listbox_events.grid(row=0, column=0, padx=10, pady=10)
listbox_events_filtered = Listbox(my_frame_out, height='5', selectmode=EXTENDED)
listbox_events_filtered.grid(row=0, column=2, padx=(0, 10), pady=10)
my_instructions = Label(my_window, text='Use arrow keys to move selected items')
my_instructions.grid(row=1, column=0, columnspan=3, pady=(0, 10))

my_list_events = ['A', 'B', 'C', 'D']

for item in my_list_events:
    listbox_events.insert(END, item)


def move_items(event):
    if event.keysym == 'Right':
        src_list = listbox_events
        dst_list = listbox_events_filtered
    elif event.keysym == 'Left':
        src_list = listbox_events_filtered
        dst_list = listbox_events
    else:
        return

    for _item in src_list.curselection():
        dst_list.insert(END, src_list.get(_item))

    for _item in reversed(src_list.curselection()):
        src_list.delete(_item)


listbox_events.bind('<Right>', move_items)
listbox_events_filtered.bind('<Left>', move_items)


mainloop()

暂无
暂无

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

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