Tkinter .bind () не вызывает подпрограмму - PullRequest
0 голосов
/ 10 ноября 2019

Я пытаюсь создать кейлоггер, используя Tkinter, но привязки не работают вообще. Я думаю, что связка не вызывает подпрограмму, но она не дает никакой ошибки, так что это просто обоснованное предположение.

Я начал этот проект 3 дня назад и ожидал, что он будет сделан вчера. Но эта проблема продолжала всплывать, я использую python 3.6.1.

Вот что я уже пробовал

  • Использование лямбды
  • Putting "command ="перед функцией
  • Изменение" def keypress (): "на" def нажатие клавиши (событие) "
  • Создание связывания в рамке
  • Связывание каждой отдельной кнопки на клавиатуре

Я даже скопировал чей-то код кейлоггера и натолкнулся на ту же проблему (да, это был python-3.x)

Это еще более расстраивает из-за количества ответов нафорумы, которые не работают, и дни гугления и просмотра документации.

import tkinter
from tkinter import *

window = Tk()
window.title("Test")
window.config(bg = "white")

frame = Frame(window, width = 1000, height = 1000)
frame.place(x = 0, y = 0)

def keypress(event):
    print("pressed", repr(event.char)) #changed repr to str and also tried deleting it 

frame.bind("<Key>", lambda: keypress(event)) #other variations of this line include frame.bind("<key>", keypress), frame.bind("<key>", keypress()), frame.bind("<key>", keypress(event))

Ожидаемый ввод - просто

>>> Pressed [the key that I pressed]

, но вывод, который вы на самом деле получаете .. .

>>>

Ничего.

Любая помощь будет замечательной, заранее спасибо!

1 Ответ

0 голосов
/ 10 ноября 2019

Вам не нужно lambda, если вы не передаете никаких аргументов.

frame.bind("<Key>", keypress)

Кроме того, привязки клавиш работают, только если виджет имеет фокус клавиатуры. По умолчанию рамка не получает фокус клавиатуры. Если вы хотите привязать к кадру, вы должны установить фокус клавиатуры:

frame.focus_set()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...