#python #tkinter
#python #tkinter
Вопрос:
Я новичок в python, и в настоящее время я изучаю циклы в Tkinter и пытаюсь создать графический интерфейс pin-кода. Я хочу, чтобы при нажатии кнопки пробела назад «<» последний элемент, добавленный в список «Введенный PIN-код», удалялся, а 1 звездочка удалялась из TxtWindow? Мне интересно, есть ли в 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()
Комментарии:
1. Используется
EntertedPin.pop()
для удаления последнего элемента из списка.2. Лучше использовать
Entry
илиLabel
вместоText
для отображения вывода и связатьStringVar
с ним (напримерpin
). Затем вы можете обновить его,pin.set("*"*len(EntertedPin))
если PIN-код не пуст, в противномpin.set("Enter Pin")
случае.
Ответ №1:
Команды, которые вы ищете
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()
Комментарии:
1. Вместо того чтобы копировать список, почему бы просто не позвонить
mylist.pop()
?2. Я часто использую индексацию, так что это моя привычка. Возможно, pop() лучше и элегантнее для этой задачи.