@Quelty

Как сделать bind функции на главное окно?

Пытаюсь забиндить на главное окно сочетание клавиш Ctrl + O и Ctrl + S, функции не вызываются по нажатию на эти клавиши.
код:
def insertText(event):
    file_name = fd.askopenfilename()
    f = open(file_name)
    s = f.read()
    text.insert(1.0, s)
    f.close()

def extractText(event):
    file_name = fd.asksaveasfilename(filetypes=(("mmm files", "*.mmm")))
    f = open(file_name, 'w')
    s = text.get(1.0, tk.END)
    f.write(s)
    f.close()
        
if __name__ == '__main__':
    root = tk.Tk()

    root.title('test')
    root.state('zoomed')

    root.bind("Control_L-S", insertText)
    root.bind("Control_L-O", extractText)

    text = Text(width=50, height=25)
    text.grid(columnspan=2)

    root.mainloop()


P.S. если забиндить функции на клавиши S и O, всё работает стабильно.
  • Вопрос задан
  • 505 просмотров
Решения вопроса 1
sergey-gornostaev
@sergey-gornostaev Куратор тега Python
Седой и строгий
def insert_text(event):
    file_name = fd.askopenfilename()
    if file_name:
        with open(file_name) as f:
            s = f.read()
            text.insert(1.0, s)


def extract_text(event):
    file_name = fd.asksaveasfilename(filetypes=(('mmm files', '*.mmm',),))
    if file_name:
        with open(file_name, 'w') as f:
            s = text.get(1.0, tk.END)
            f.write(s)


if __name__ == '__main__':
    root = tk.Tk()

    root.title('test')
    root.state('zoomed')

    root.bind('<Control-o>', insert_text)
    root.bind('<Control-s>', extract_text)

    text = tk.Text(width=50, height=25)
    text.grid(columnspan=2)

    root.mainloop()
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы