在 python 中的列表框之间移动项目

时间:2021-02-09 11:27:14

标签: python tkinter listbox

我是 Python 的新手,只有一点 VBA 经验。我正在尝试使用 tkinter 创建一个简单的卡片跟踪程序。我希望能够在两个列表框之间移动卡片,这样它们就可以先被丢弃,然后再回到甲板上。我已经掌握了基础知识,设置了两个列表框和两个在它们之间移动卡片的按钮;但是,我无法为列表框中选定的卡片执行此操作。 (目前它只是设置为移动第一个值。)

我已经搜索了解决方案,但几乎没有编程经验,我无法将已经存在的各种解决方案解释为我的代码。从我读过的内容来看,列表框返回的格式与使用索引值之间似乎有些不兼容。我找到了关于如何将一种转换为另一种的各种建议,但我自己都没能做到!

非常感谢您的帮助!

 from tkinter import *
root = Tk()
root.title("Twilight Struggle Card Counter")
root.geometry("1400x600")

#Define named cards
KOH = "King of Hearts"
QOD = "Queen of Diamonds"

#Compile card lists
Draw = [KOH,QOD,3,4,5,6]
Discard = []

#Create Draw listbox
Drawbox = Listbox(root,width=20)
Drawbox.pack(pady=15)

#Create Discard listbox
Discardbox = Listbox(root,width=20)
Discardbox.pack(pady=20)

#Add lists to listbox
for item in Draw:
    Drawbox.insert(END, item)

for item in Discard:
    Discardbox.insert(END, item)

#need to find a way to convert listbox value to integer
a = Drawbox.index(ACTIVE)
b = Discardbox.index(ACTIVE)

#Discard button
def discard():
    Discard.append(Draw.pop(a))
    Drawbox.delete(0, END)  #clear listbox
    for item in Draw:
        Drawbox.insert(END, item)
    Discardbox.delete(0, END)
    for item in Discard:
        Discardbox.insert(END, item)
    
    print("Draw", Draw, "Discard", Discard)
    
Discard_Button = Button(root,text="Discard", command=discard)
Discard_Button.pack(pady=10)

#Add button
def Add():
    Draw.append(Discard.pop(b))
    Discardbox.delete(0, END)  #clear listbox
    for item in Discard:
        Discardbox.insert(END, item)
    Drawbox.delete(0, END)
    for item in Draw:
        Drawbox.insert(END, item)
    
    print("Draw", Draw, "Discard", Discard)
    
Add_Button = Button(root,text="Add", command=Add)
Add_Button.pack(pady=10)

root.mainloop()


 

1 个答案:

答案 0 :(得分:0)

您可以使用 curselection 方法获取当前选定的项目。它将返回一个列表,因此您需要从列表中获取所选项目的索引。

解决方案如下所示:

def discard():
    selection = Drawbox.curselection()
    if selection:
        index = selection[0]
        card = Draw.pop(index)
        Discard.append(card)
        Drawbox.delete(index)
        Discardbox.insert("end", card)
相关问题