Обучение Python (72 частью серии)
Давайте изучать событие KeyPress в виджете ввода TKinter
Вчера мы сделали фиктивную программу входа в систему (менеджер паролей). Но это был пароль был скрыт. Данные пароля могут быть доступны только StorePassword () функция. Но Сегодня, как насчет секретной ловушки, доступной для хакеров, чтобы украсть пароли😈
Событие KeyPress.
Мы можем достичь этого, написав кусок кода в основную программу, которая сканирует все, что мы записываем в виджет ввода пароля, и печатаете его в командной строке. Это можно сделать с помощью события клавиши. E1.Bind (« Всякий раз, когда какая-либо клавиша нажата, то выполняется функция «Keypress».
Вот полный код
from tkinter import *
spy=Tk()
spy.geometry("300x200")
spy.title("spyware")
def keypress(event):
try:
print(ord(event.char),end=".")
except: # for blank press
pass
e1=Entry(spy,show='*')
e1.focus_set()
e1.bind("",keypress)
# mind the case of 'key'- k must be K
e1.pack()
spy.mainloop()
Так что происходит? Ну, фактическое действие происходит в окне оболочки.
Позвольте мне объяснить, что делает функцию KeyPress. Всякий раз, когда какая-либо клавиша нажата, выполняется функция клавиатуры. Эта функция сначала извлекает, какая клавиша нажата. Затем он преобразует ключ в значение ASCII и печатает его в командной оболочке, используя точку для разделения. Таким образом, можно обнаружить даже персонажи, такие как Backspace и ключ ввода ввода. Разбор этой строки, чтобы получить пароль – это кусок пирога для хакера
Код завернут в попытках, кроме предотвращения пустых ключевых прессов, которые приводит к ошибкам, как
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Users\aatma\AppData\Local\Programs\Python\Python310\lib\tkinter\__init__.py", line 1884, in __call__
return self.func(*args)
File "C:/Users/aatma/AppData/Local/Programs/Python/Python310/spy.py", line 6, in keypress
print(ord(event.char),end=".")
TypeError: ord() expected a character, but string of length 0 found
Давайте теперь будем парить код с нашим менеджером паролей и увидеть результаты.
import tkinter as tk # import the Tkinter module
form=tk.Tk() # create the blank window.
form.title("password manager") # set the title as password manager
form.geometry('400x200') # set the default geometry of the window.
TB1=tk.Entry(form, width = 20)
# make an entry widget with 20 spaces for the username
TB2=tk.Entry(form,show="*", width = 20)
def keypress(event):
try:
print(ord(event.char),end=".")
except: # for blank press
pass
TB2.bind("",keypress)
# entry widget for password and hide the keys whenever pressed.
# TB1 is for username, TB2 is for password
TB1.pack()
TB2.pack()
# pack the widgets into 'form'
label=tk.Label(form,text="")
# make a label to display the username
def show(): #function to be executed once the button is pressed.
a=TB1.get() # get username
b=TB2.get() # get password
if(a!="" and b!=""):
label.config(text="Welcome "+a+" to python GUI",fg="Green") # display the label
storepassword(a,b) # store password and username
else:
label.config(text="Please enter a valid username and password.",fg="Red") # blank screens
def storepassword(username, password):
#//Some mechanism to store password//
pass #stubbed
button=tk.Button(form,text="Sign Up", command=show) # setup the button
button.pack()
label.pack()
form.mainloop()
show()
Так что друзья, которые были все на сегодня. Оставайтесь настроиться на обновления …..
Обучение Python (72 частью серии)
Оригинал: “https://dev.to/aatmaj/learning-python-intermediate-course-day-27-entry-keypress-event-5d15”