python - 在python中的列表框之间移动项目
问题描述
我是 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)
推荐阅读
- c# - 如何避免更改 linq 序列 concat 中的顺序
- google-app-maker - 如何在 Google App Maker 的表格中将布尔值显示为图像?
- php - 在 id 中添加年份和前导零
- c# - 是否可以在游戏中使用 Unity 上的 EditorStyle 来执行水平按钮组?
- json - 如何过滤嵌套数组中不包含键值对的条目
- ios - 具有多种 iOS 配置的新 Fabric Crashlytics 设置,无 dSYM
- xml - 用于不同元素顺序的 XSD 架构和无界出现
- hive - 运行 Hive 查询并关闭计算机
- php - 如何正确获取此代码以在引号中显示标题?
- c++ - 无法使用 Mingw32 QT 5.12 编译 QtPdfium 来阅读 PDF