如何在 tkinter 中将项目从一个列表框移动到另一个列表框
how to move items from one listbox to another listbox in tkinter
我是 python 的新手,正在尝试学习 tkinter。有人可以帮我解决这个问题吗?我已经坚持了好几天了。我想将一个项目从一个列表框移动到另一个列表框。我首先尝试使用 bind 和 <> 但无法让它工作。然后我创建了一个函数并尝试只使用一个按钮。我可以使用鼠标从第一个列表框中 select 数据,并设法将其放入标签中,但我确实需要它进入第二个列表框 - 但无法将其 work.Any 帮助
from tkinter import *
from tkinter import ttk
my_window = Tk()
my_listbox_in = Listbox(my_window, height='5')
my_listbox_in.grid(row=0, column=0)
my_listbox_out = Listbox(my_window, height='5')
my_listbox_out.grid(row=0, column=2)
my_list = ['1', '2', '4', '6']
for item in my_list:
my_listbox_in.insert(END, item)
def delete():
my_listbox_in.delete(ANCHOR)
# delete all my_listbox_in.delete(0,END)
def select():
# my_label.config(text=my_listbox_in.get(ANCHOR))
my_listbox_out.insert(my_listbox_in.get(ANCHOR))
button1 = Button(my_window, text='Delete', command=delete)
button1.grid(row=0, column=1)
button2 = Button(my_window, text='select', command=select)
button2.grid(row=1, column=1)
my_label = Label(my_window, text='my_label')
my_label.grid(row=2, column=1)
#my_listbox_in.bind('<<ListboxSelect>>', select())
mainloop()
难道就这么简单...?
def select():
my_listbox_out.insert(END, my_listbox_in.get(ANCHOR))
# ---------------------^ forgot to specify insert point
更新回答
至于绑定;我假设你的意思是绑定到键盘箭头键。那么这里有一个例子:
from tkinter import *
from tkinter import ttk
my_window = Tk()
my_listbox_in = Listbox(my_window, height='5')
my_listbox_in.grid(row=0, column=0, padx=10, pady=10)
my_listbox_out = Listbox(my_window, height='5')
my_listbox_out.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 = ['1', '2', '4', '6']
for item in my_list:
my_listbox_in.insert(END, item)
def select(event=None):
my_listbox_out.insert(END, my_listbox_in.get(ANCHOR))
my_listbox_in.delete(ANCHOR)
def deselect(event=None):
my_listbox_in.insert(END, my_listbox_out.get(ANCHOR))
my_listbox_out.delete(ANCHOR)
my_window.bind('<Right>', select)
my_window.bind('<Left>', deselect)
mainloop()
这些函数不保留项目顺序,但如果这很重要,您可以让回调函数对它们进行排序。
我是 python 的新手,正在尝试学习 tkinter。有人可以帮我解决这个问题吗?我已经坚持了好几天了。我想将一个项目从一个列表框移动到另一个列表框。我首先尝试使用 bind 和 <> 但无法让它工作。然后我创建了一个函数并尝试只使用一个按钮。我可以使用鼠标从第一个列表框中 select 数据,并设法将其放入标签中,但我确实需要它进入第二个列表框 - 但无法将其 work.Any 帮助
from tkinter import *
from tkinter import ttk
my_window = Tk()
my_listbox_in = Listbox(my_window, height='5')
my_listbox_in.grid(row=0, column=0)
my_listbox_out = Listbox(my_window, height='5')
my_listbox_out.grid(row=0, column=2)
my_list = ['1', '2', '4', '6']
for item in my_list:
my_listbox_in.insert(END, item)
def delete():
my_listbox_in.delete(ANCHOR)
# delete all my_listbox_in.delete(0,END)
def select():
# my_label.config(text=my_listbox_in.get(ANCHOR))
my_listbox_out.insert(my_listbox_in.get(ANCHOR))
button1 = Button(my_window, text='Delete', command=delete)
button1.grid(row=0, column=1)
button2 = Button(my_window, text='select', command=select)
button2.grid(row=1, column=1)
my_label = Label(my_window, text='my_label')
my_label.grid(row=2, column=1)
#my_listbox_in.bind('<<ListboxSelect>>', select())
mainloop()
难道就这么简单...?
def select():
my_listbox_out.insert(END, my_listbox_in.get(ANCHOR))
# ---------------------^ forgot to specify insert point
更新回答
至于绑定;我假设你的意思是绑定到键盘箭头键。那么这里有一个例子:
from tkinter import *
from tkinter import ttk
my_window = Tk()
my_listbox_in = Listbox(my_window, height='5')
my_listbox_in.grid(row=0, column=0, padx=10, pady=10)
my_listbox_out = Listbox(my_window, height='5')
my_listbox_out.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 = ['1', '2', '4', '6']
for item in my_list:
my_listbox_in.insert(END, item)
def select(event=None):
my_listbox_out.insert(END, my_listbox_in.get(ANCHOR))
my_listbox_in.delete(ANCHOR)
def deselect(event=None):
my_listbox_in.insert(END, my_listbox_out.get(ANCHOR))
my_listbox_out.delete(ANCHOR)
my_window.bind('<Right>', select)
my_window.bind('<Left>', deselect)
mainloop()
这些函数不保留项目顺序,但如果这很重要,您可以让回调函数对它们进行排序。