非常に複雑なpython tkinterフォームへのイベント(Ctrl + ZとCtrl + Yの1つ)をバインドしたい(ルートには多くの子フレームがあり、それぞれのイベントにバインドするのは非常に面倒で冗長です)。私はルートにキーをバインドする方法があることを望んだので、フォーカスが子ウィジェットの内側にあってもバインディングがトリガーされるようにしました。私がこれまでに試したのはこれです:Python tkinter以降のすべてのウィジェットへのキーバインド
def _init_gui(self, root):
""" Initializes all members of the gui"""
tkinter.Frame.__init__(self, root) #Superclass init
self.root = root
width, height = root.winfo_screenwidth(), root.winfo_screenheight()
#Most of the code is left out because it is not neccessary
self.root.bind_all("Control-z", lambda _: self.undo())
self.root.bind_all("Control-y", lambda _: self.redo())
しかし、これは動作していないようです。これには適切な解決策はありますか? (結果が同じでないバインドメソッドも試しました)
'bind'または' bind_all'は、そのために働く必要があります。コマンドで角括弧を使用していることを確認してください。 'self.root.bind(" "、self.undo)' –
Novel
ありがとう、愚かな私...しかし、イベント以来ラムダが必要です取り消しとやり直しの署名は明らかに議論を取りません。 – PfannkuchenXD
これを署名に追加します。標準形式は 'def undo(self、event = None):'であり、バインドまたは通常から呼び出すことができます。トレースからそれを呼び出す機能を追加したい場合、 'def undo(self、* args):' – Novel