Как сделать два нажатия, чтобы сделать одинаковый вывод в Tkinter - PullRequest
0 голосов
/ 15 октября 2019

Я хочу создать программу Tkinter, которая связывает два входа с одним выходом. Я попробовал это:

def hh(event):
      print('hello')
root.bind(<Returna>, hh)

и

def hh(event):
    print('hello')
root.bind('<Return, KeyPress-a>')

Но это не сработало так, как ожидалось. Может кто-нибудь сказать мне, как я могу сделать <Shift> и <KeyPress-a> вместе, чтобы вызвать hh()? Спасибо!

Первая ошибка

Traceback (most recent call last):
  File "tktest.py", line 19, in <module>
    root.bind('<Returna>', hh)
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/tkinter/`__init__.`py", line 1251, in bind
    return self._bind(('bind', self._w), sequence, func, add)
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/tkinter/`__init__`.py", line 1206, in _bind
    self.tk.call(what + (sequence, cmd))
_tkinter.TclError: bad event type or keysym "Returna" 

Вторая ошибка

Traceback (most recent call last):  
  File "tktest.py", line 19, in <module>  
    root.bind('<Return, KeyPress-a>', hh)  
  File  "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/tkinter/__init__.py", line 1251, in bind  
    return self._bind(('bind', self._w), sequence, func, add)  
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/tkinter/__init__.py", line 1206, in _bind  
    self.tk.call(what + (sequence, cmd))  
_tkinter.TclError: bad event type or keysym "Return,"  

1 Ответ

1 голос
/ 15 октября 2019

Вы должны использовать строку '<Return>a' и добавить имя функции

root.bind('<Return>a', hh)

, но она будет работать hh() при нажатии a сразу после Enter


import tkinter as tk

def hh(event):
      print('hello')

root = tk.Tk()
root.bind('<Return>a', hh)
root.mainloop()

Если вы хотите запустить hh(), когда вы нажимаете Enter ИЛИ a, вам нужно два связывания

root.bind('<Return>', hh)
root.bind('a', hh)

import tkinter as tk

def hh(event):
      print('hello')

root = tk.Tk()
root.bind('<Return>', hh)
root.bind('a', hh)
root.mainloop()

РЕДАКТИРОВАТЬ:

В отредактированном вопросе я вижу <Shift>, поэтому, возможно, это должно быть Shift + a? Потребовалось бы A

root.bind('A', hh) # Shift + a

Во второй ошибке я вижу Return,, но, возможно, это должно быть Shift + , со специальным именем <less>

root.bind('<less>', hh) # Shift + , 

В ответечтобы .bind () не работал для привязок клавиш Shift? Я показал код, который отображает keysym для нажатой клавиши и который можно использовать в bind()

import tkinter as tk

def test(event):
    print('keysym:', event.keysym)

root = tk.Tk()
root.bind('<Key>', test)
root.mainloop()

Некоторые именавы можете найти в документации Tcl / Tk - keysym

Но нет специальных keysym для Return + a или Return + ,, потому что это необычная комбинация, и, возможно, ее нужно держать нажатой. Return / Enter и затем нажмите a или ,. Или нажмите Return, отпустите Return и нажмите a или ,

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