我是 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()
答案 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)