WedX - журнал о программировании и компьютерных науках

Как читать события Python Num-Lock Keypress Toggle?

Для проекта я делаю программу, полностью управляемую цифровой клавиатурой. Многое зависит от того, будут ли кнопки на цифровой клавиатуре определяться как удерживаемые или нет; Я бы установил для логического значения значение true, когда оно нажато, и значение false, когда оно отпущено. С этими ограничениями я столкнулся с проблемой: клавиша Num-Lock переключается между верхним и нижним положениями при каждом нажатии и ничего не происходит при отпускании. С той же системой, которую я использовал для других клавиш, однократное нажатие клавиши сделало бы ее истинной, а повторное нажатие сделало бы ее снова ложной, а не нажатие на нее сделало бы ее истинной, а ОТПУСТИТЕ ее снова сделало бы ее ложной.

По сути, как я могу заставить клавишу Num-Lock цифровой клавиатуры запускать что-то как при нажатии, так и при отпускании вместо переключения при каждом нажатии?

Предполагаемая ОС: Windows и Linux (Raspberry Pi)
Python 3.x

Я получаю входные данные такие же, как и в играх Python на raspberry pi, используя event.type и event.key и т. д.



Ответы:


1

Обработчики событий, уже интегрированные в Tkinter, могут вам очень помочь:

Событие имеет следующие атрибуты:

#       <event>.char        on-{ <KeyPress> | <KeyRelease> }
#              .keysym      on-{ <KeyPress> | <KeyRelease> }
#              .keysym_num  on-{ <KeyPress> | <KeyRelease> }
#              .height      on-{ <Configure> }
#              .width       on-{ <Configure> }
#              .num         on-{ <Mouse-1>  | <Mouse-2> | ... } ? 4,5 == <MouseWheel>
#              .serial      <-- system-assigned Integer
#              .time        <-- system-assigned Integer ( .inc each msec )
#              .widget      <-- system-assigned <widget>-instance
#              .x           <-- system-assigned <Event>-in-<widget>-mouse-location.x
#              .y           <-- system-assigned <Event>-in-<widget>-mouse-location.y
#              .x_root      <-- system-assigned <Event>-on-<Screen>-mouse-location.x
#              .y_root      <-- system-assigned <Event>-on-<Screen>-mouse-location.y

Этот демо-макет может показать вам механику:

    #---------------------------------------------------------------# EVENT HANDLER DEMO:
    #       from Tkinter import *                                   # import Tkinter as tk
            root = Tk()                                             # root = tk.Tk()
            root.lift()    
            #-------------------------------------------------------                                                    
            >>> def aMouseEnterHANDLER( anEvent ):
            ...      print "<Enter>-event: ", anEvent.serial, anEvent.time, anEvent.x, anEvent.y, str( anEvent.widget )
            ...      print 
            ...
            >>> def KeyHANDLER( anEvent ):
            ...      print "<Key>-event: ", anEvent.serial, anEvent.time, anEvent.char, anEvent.keysym, anEvent.keysym_num, str( anEvent.widget )
            ...
            >>> root.bind( "<Enter>", aMouseEnterHANDLER )
            '23852056EnterHandler'
            >>> root.bind( "<KeyPress>", KeyHANDLER )               # root-widget level .bind()
            '23852576KeyHandler'

            >>> root.mainloop()                                     # <-- after entering this, <KeyPress> started to work ----------------------

            <Key>-event:  904 590059546 s s 115 .
            <Enter>-event:  911 590065062 1 5 .
            <Enter>-event:  911 590065062 1 5 .12965248
            <Enter>-event:  915 590067703 4 1 .
            <Enter>-event:  915 590067703 4 1 .12965248
            <Key>-event:  918 590069062 s s 115 .
            <Key>-event:  920 590069906 s s 115 .
            <Key>-event:  922 590070390  Caps_Lock 65509 .
            <Key>-event:  924 590071687  Shift_L 65505 .            
            <Key>-event:  925 590072187  Shift_L 65505 .
            <Key>-event:  926 590072218  Shift_L 65505 .
            <Key>-event:  927 590072250  Shift_L 65505 .
            <Key>-event:  928 590072281  Shift_L 65505 .
            <Key>-event:  929 590072328  Shift_L 65505 .
            <Key>-event:  930 590072359  Shift_L 65505 .
            <Key>-event:  931 590072390  Shift_L 65505 .
            <Key>-event:  932 590072421  Shift_L 65505 .
            <Key>-event:  934 590072890 A A 65 .
            <Key>-event:  936 590073390 A A 65 .
            <Key>-event:  938 590073531 A A 65 .
            <Key>-event:  940 590073718 A A 65 .
            <Key>-event:  942 590074093  Shift_L 65505 .
            <Key>-event:  944 590074625  Shift_L 65505 .
            <Key>-event:  946 590074843  Shift_L 65505 .
            <Key>-event:  948 590075031  Shift_L 65505 .
            <Key>-event:  950 590075656  Shift_L 65505 .
            <Key>-event:  952 590076031  Caps_Lock 65509 .
            <Enter>-event:  956 590109296 0 1 .
            <Enter>-event:  956 590109296 0 1 .12965248
            <Enter>-event:  959 590109734 6 5 .12965248
            <Enter>-event:  962 590110078 9 9 .
            <Enter>-event:  962 590110078 9 9 .12965248
            <Enter>-event:  965 590110328 9 10 .12965248
            <Enter>-event:  968 590111781 40 19 .
            <Key>-event:  968 590113875  Up 65362 .
            <Key>-event:  970 590114781  Left 65361 .
            <Key>-event:  972 590116718 + plus 43 .
            <Key>-event:  974 590117656 - minus 45 .
            Return 65293 .976 590118343
            <Key>-event:  978 590120359 d d 100 .
            <Key>-event:  980 590123312     Tab 65289 .
            <Key>-event:  988 590124140     Tab 65289 .12965248
            <Key>-event:  988 590124140     Tab 65289 .12965248
            <Key>-event:  990 590125578     Tab 65289 .12965248
            <Key>-event:  990 590125578     Tab 65289 .12965248
15.02.2018
Новые материалы

Как проанализировать работу вашего классификатора?
Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

Работа с цепями Маркова, часть 4 (Машинное обучение)
Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

Учебные заметки: создание моего первого пакета Node.js
Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..

ИИ в аэрокосмической отрасли
Каждый полет – это шаг вперед к великой мечте. Чтобы это происходило в их собственном темпе, необходима команда астронавтов для погони за космосом и команда технического обслуживания..


Для любых предложений по сайту: [email protected]