首页 > 解决方案 > Python Tkinter - 当我不知道它的索引时从列表中删除一个项目

问题描述

我是 python 新手,目前正在学习 Tkinter 中的循环并尝试构建 pin 代码 GUI。我想要发生的是当按下退格按钮“<”时,添加到列表“输入的 Pin”的最后一项被删除,并且从 TxtWindow 中删除了 1 个 Asterix?我想知道当我不知道列表中有多少项目时,python 中是否有一种特殊的方法可以删除添加到列表中的最后一项。在此先感谢我的代码如下

import tkinter as tk
window = tk.Tk()
def PinEntry(x):
    global u
    global counter
    if u == 1:
        TxtWindow.delete("1.0", "end")
        u =  u+1
    if EntertedPin == DefaultPin:
            window.destroy()  
    if x in range (len(EntryKeyList)):
        EntertedPin.append (EntryKeyList [x])
        TxtWindow.insert (tk.END, "*")
        counter = counter +1
        
        if x == 2:
            EntertedPin.clear()
            TxtWindow.delete("1.0", "end")
            TxtWindow.insert (tk.END, "Enter Pin")
            u = 1
            coutner = 0
        if x == 0:
            EntertedPin.clear()
            TxtWindow.delete("1.0", "end")
            TxtWindow.insert (tk.END, "Enter Pin")
            u = 1
            counter = 0
        
        if x == 12:
            # Delete last number in the list and remove one asterix from the TxtWindow
        
        
EntertedPin = []
DefaultPin = [1,2,3,0]
u = 1
counter = -1
TxtWindow = tk.Text(window, relief = "sunken", width = 10, height = 1)
TxtWindow.insert (tk.END, "Enter Pin")
TxtWindow.grid (row = 1, column = 2)
x = 1
y = 1
a = 5
b = 4
c = 1
d = 3
e = 1
f = 2
g = 1
EntryKeyList = ["CLR", 0, "ENT", 1, 2, 3, 4, 5, 6, 7, 8, 9, "<" ]
for i in range (13):
    KeypadBtn = tk.Button(window, width = 5, height = 3, text = EntryKeyList[i], command = lambda x=i: PinEntry(x))
    if y <=3:
        KeypadBtn.grid  (row = a , column = x )
        x = x +1
        y=y +1
    elif y <= 6:
        KeypadBtn.grid  (row = b , column = c )
        c = c +1
        y=y+1
    elif y <= 9:
        KeypadBtn.grid  (row = d , column = e )
        e = e +1
        y=y+1


  elif y <=12:
        KeypadBtn.grid  (row = f , column = g )
        g = g +1
        y=y+1
    else:
        KeypadBtn.grid (row = 1, column = 3)
        
window.mainloop()

标签: pythontkinter

解决方案


您正在寻找的命令

TxtWindow.delete("end-2c", "end")
mylist=mylist[:-1] or mylist.pop()

但是代码是错误的。退格不能将“x”添加到小部件。

def PinEntry(x):
    global u
    global counter
    global EntertedPin
    global DefaultPin
    
    if u == 1:
        TxtWindow.delete("1.0", "end")
        u =  u+1
    
    
    if x in range (len(EntryKeyList)):        
        
        if x == 12:
            # Delete last number in the list and remove one asterix from the TxtWindow
            EntertedPin=EntertedPin[:-1]            
            TxtWindow.delete("end-2c", "end")
        
        # If the button is not number:
        else: 
            if x == 2:
                EntertedPin.clear()
                TxtWindow.delete("1.0", "end")
                TxtWindow.insert (tk.END, "Enter Pin")
                u = 1
                coutner = 0
            
            
            elif x == 0:
                EntertedPin.clear()
                TxtWindow.delete("1.0", "end")
                TxtWindow.insert (tk.END, "Enter Pin")
                u = 1
                counter = 0
            EntertedPin.append (EntryKeyList [x])
            TxtWindow.insert (tk.END, "*")
            counter = counter +1
    
    if EntertedPin == DefaultPin:
            window.destroy()  

推荐阅读