Python 使按钮更改列表框的内容
我试图通过按下按钮将列表框中的选定元素移动到另一个列表框中。但是,我不明白如何让按钮知道它正在获取哪些列表框并将数据发送到哪些列表框 这是我的密码:Python 使按钮更改列表框的内容,python,tkinter,listbox,Python,Tkinter,Listbox,我试图通过按下按钮将列表框中的选定元素移动到另一个列表框中。但是,我不明白如何让按钮知道它正在获取哪些列表框并将数据发送到哪些列表框 这是我的密码: import tkinter as tk from tkinter import ttk class MoveItems(ttk.Button): #the button should move things from the origin listbox to the destiny #listbox def __init__(self
import tkinter as tk
from tkinter import ttk
class MoveItems(ttk.Button):
#the button should move things from the origin listbox to the destiny
#listbox
def __init__(self, parent, origin, destiny, label):
ttk.Button.__init__(self, parent, text = label)
self.parent = parent
self.origin = origin #is this correct?
self.destiny = destiny
self.command = self.moveToDestiny
def moveToDestiny(self):
selected_items = self.origin.curselection()
selected = [self.origin.get(i) for i in selected_items]
self.destiny.list_update(selected)
class ListOfThings(tk.Listbox):
#here are my listboxes
#list_update adds a list to the listbox
def __init__(self, parent, list_to_show):
tk.Listbox.__init__(self, parent, selectmode = tk.EXTENDED)
self.list_to_show = list_to_show
self.parent = parent
self.list_update(list_to_show)
def list_update(self, list):
for item in list:
self.insert(tk.END, item)
class SelectFromList(ttk.Frame):
def __init__(self, parent, *args, **kwargs):
tk.Frame.__init__(self, parent, *args, **kwargs)
self.parent = parent
list1 = ["A", "B", "C"]
list2 = ["D", "E", "F"]
self.leftList = ListOfThings(self, list1)
self.rightList = ListOfThings(self, list2)
self.moveRight = MoveItems(self, self.leftList, self.rightList, "-->")
self.leftList.pack(side = "left")
self.moveRight.pack(side = "left")
self.rightList.pack(side = "right")
if __name__ == "__main__":
root = tk.Tk()
SelectFromList(root).pack(side="top", fill="both", expand=True)
root.mainloop()
我不确定我的MoveItems按钮的
\uuuu init\uuuuu
是否真的跟踪原始和命运列表框。我试图只打印选定的
项,但终端上没有显示任何内容。我认为self.command=self.moveToDestiny
不能满足您的要求。我们知道command
是按钮的init
方法中的参数名称,但这并不一定意味着该值随后存储在command
属性中
调用按钮时,请尝试指定命令
。\uuuuu init\uuuuu
class MoveItems(ttk.Button):
#the button should move things from the origin listbox to the destiny
#listbox
def __init__(self, parent, origin, destiny, label):
ttk.Button.__init__(self, parent, text = label, command=self.moveToDestiny)
现在,您的按钮应该成功地将项目添加到右侧的列表框中
我打赌您也希望从左框中删除所选项目。您必须创建另一个从列表中删除项目的
ListOfThings
方法。比如:
def list_remove(self, items_to_remove):
items = self.get(0, tk.END)
remaining_items = [item for item in items if item not in items_to_remove]
self.delete(0, tk.END)
self.list_update(remaining_items)
(可能不是最好的方法,但这只是一个例子)
然后可以在moveToDestiny
中调用它
def moveToDestiny(self):
selected_items = self.origin.curselection()
selected = [self.origin.get(i) for i in selected_items]
self.destiny.list_update(selected)
self.origin.list_remove(selected)
我找错地方了。将命令放在按钮的init中解决了问题。感谢您提供从列表框中删除项目的后续示例。