Python tkinter simpledialog. Как привязать ключ к кнопке ОК в simpledialog

def prompt_new_name(self):
    new_name = simpledialog.askstring("Name Change", "New name")
    if new_name is not None:
        self.request_name_change(new_name)

Я хочу привязать клавишу ввода на клавиатуре к кнопке ОК в приглашении простого запроса. (позже выяснилось, что нормальная клавиша ввода уже связана, но мне нужно связать обе клавиши ввода) Я знаю, как связать клавишу ввода с виджетом, используя функцию связывания. Однако для этого мне нужна ссылка на виджет.

В этом случае у меня нет ссылки на виджет, так как я вызываю функцию askstring для simpledialog без создания виджета. Мне интересно, как я могу добиться того, чего хочу.

1 ответ

Решение

SimpleDialog это просто". Создать собственный диалог (используя TopLevel виджет) если нужно что то другое.


Или увидеть SimpleDialog исходный код для воссоздания askstring

https://fossies.org/dox/Python-3.5.0/simpledialog_8py_source.html

import tkinter as tk
import tkinter.simpledialog 

class My_QueryString(tkinter.simpledialog._QueryString):

      def body(self, master):
          self.bind('<KP_Enter>', self.ok) # KeyPad Enter
          super().body(master)

def myaskstring(title, prompt, **kw):
    d = My_QueryString(title, prompt, **kw)
    return d.result

#---------------------------------------------------------

root = tk.Tk()

new_name = myaskstring("Name Change", "New name")
if new_name:
    print(new_name)

root.mainloop()
Другие вопросы по тегам