我是一个全新的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()
您可以使用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)