我正在尝试制作一个计算器应用程序,将记忆的数字或方程式存储到字符串列表中。我还试图创建一个辅助窗口,其中显示每个内存条目的删除按钮和标签。我使用一个按钮列表和标签列表,并尝试匹配所有3个列表的索引
当按下delete按钮时,我想在所有三个列表上弹出相同的索引,并销毁被按下的按钮及其相应的标签。此功能的一个示例是windows 10计算器应用程序。但是,我知道,如果我弹出一个索引,它成为该索引后的索引,因此您不能只为每个按钮分配一个固定的索引。所以我想主要的问题是,我如何获得一个特定按钮的当前索引,并使用它来确定要在其他两个列表中删除哪个字符串和标签?我尝试在memDeleteButtons.index(self)中使用self,但由于某些原因,它无法解决任何问题
下面是我正在编写的代码:
def memDestroyer(index):
if memBank.__len__() and memDeleteButtons.__len__() and memLabels.__len__() > 0:
memLabels[index].destroy()
memDeleteButtons[index].destroy()
memLabels.pop(index)
memBank.pop(index)
memDeleteButtons.pop(index)
else:
return
def memMenu():
print(memBank)
global root1
root1 = Tk()
root1.title("Saved Equations")
root1.geometry("300x600")
index = 0
for i in memBank:
print("loop began")
if i == "":
memBank.pop(memBank.index(i))
continue
elif index >= memBank.__len__():
break
else:
memLabels.append(Label(root1, text=i))
memLabels[-1].pack()
memDeleteButtons.append(Button(root1, text="x"))
memDeleteButtons[-1].config(command=lambda:memDestroyer(memDeleteButtons.index(self)))
memDeleteButtons[-1].pack()
index += 1
print("loop ended")
root1.mainloop()
好的,我已经想出了如何使按钮具有适应性。我需要做两件事:
在弹出索引后,我需要将索引重新分配给按钮上的command属性。因此,我首先创建了一个for循环,循环遍历按钮列表,并从0开始将索引重新分配给它们的命令属性。这确保了所有按钮都将始终具有更新的命令属性,就像以前一样,它们总是尝试引用一个索引,如果之前的索引被弹出,该索引将不再是它们的索引
我需要在每个按钮的command属性中用lambda编写一个参数。命令是lambda c=i:memdestropher(c)。这是因为循环结束后,我将始终等于列表的最后一个索引,所以您可以看到这将是一个问题。然而,通过使用c=1,c不是i,它保存了i在特定迭代中曾经等于的值,因此它允许每个按钮有自己的索引分配
下面是代码:
相关问题 更多 >
编程相关推荐