1
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)

キーパッドの Enter キーを simpledialog askstriig プロンプトの [OK] ボタンにバインドしたいと考えています。(後で通常のEnterキーはすでにバインドされていることに気付きましたが、両方のEnterキーをバインドする必要があります)バインド機能を使用してEnterキーをウィジェットにバインドする方法を知っています。ただし、そのためには、ウィジェットへの参照が必要です。

この場合、ウィジェットを作成せずに simpledialog で askstring 関数を呼び出しているため、ウィジェットへの参照がありません。自分のやりたいことをどうやったら実現できるか、悩んでいます。

4

1 に答える 1

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()
于 2015-11-12T03:59:29.597 に答える