Tkinter <Return>событие при отпускании ключа - PullRequest
3 голосов
/ 10 ноября 2011

Есть ли способ сделать вызов события <Return> при отпускании клавиши вместо нажатия?

Если вы используете <KeyRelease>, то event.char будет пустым для любой специальной клавиши, а не тольковернуться.

Ответы [ 2 ]

8 голосов
/ 11 ноября 2011

Вы можете явно установить привязку для освобождения ключа возврата, связавшись с <KeyRelease-Return>.

Например:

import Tkinter as tk

class SampleApp(tk.Tk):
    def __init__(self, *args, **kwargs):
        tk.Tk.__init__(self, *args, **kwargs)
        self.text = tk.Text(self)
        self.text.pack()
        self.text.bind("<KeyRelease-Return>", self.on_return_release)

    def on_return_release(self, event):
        self.text.insert("end", "boink! ")

if __name__ == "__main__":
    app = SampleApp()
    app.mainloop()

Если вы не хотите, чтобы что-то происходилопри нажатии клавиши возврата вы можете удалить привязку по умолчанию или создать собственную привязку, которая возвращает "break"

3 голосов
/ 10 ноября 2011

Вы можете проверить, что event.keysym=='Return':

class App(object):
    def __init__(self, master, **kwargs):
        self.master=master
        master.bind('<KeyRelease>',self.release)
    def release(self,event):
        if event.keysym=='Return':
            print('Return Release')
root=tk.Tk()
app=App(root)
root.mainloop()

Обратите внимание, что если у вас есть автоматическое повторение, будут события KeyRelease, даже если вы не отпустите клавишу физически.


Чтобы отключить автоповтор под Xwindows:

import Xlib.display as display
import Xlib.X as X
import Tkinter as tk
import atexit

@atexit.register
def autorepeat():
    d=display.Display()    
    d.change_keyboard_control(auto_repeat_mode=X.AutoRepeatModeOn)
    x=d.get_keyboard_control()    

class App(object):
    def __init__(self, master, **kwargs):
        self.master=master
        master.bind('<KeyRelease>',self.release)
    def release(self,event):
        if event.keysym=='Return':
            print('Return Release')

d=display.Display()
d.change_keyboard_control(auto_repeat_mode=X.AutoRepeatModeOff)
x=d.get_keyboard_control()
root=tk.Tk()
app=App(root)
root.mainloop()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...