4

ttk::combobox の動作を拡張して、ブラウザの Google 検索ボックスのように動作させようとしています。つまり、自動的にドロップダウンして、リストボックスのエントリを、ここまで入力しました。最終的には、オートコンプリートされた文字列の一部を選択して、ユーザーが次に入力する文字が削除され、照合プロセスが再開されるようにしたいと考えています。

Tcler の wikiでページを見つけましたが、入力したばかりの文字を含むエントリが選択されているように見えますが、これは私が望んでいるものではありません。(ユーザーが米国の州のリストから選択することを考えてみましょう。ユーザーが A を入力すると、選択をアラバマ、アラスカ、アリゾナ、アーカンソーに限定したいと思います。その後、L を入力すると、リストはアラバマとアラスカに限定されます。ウィキのコードでは、ユーザーが A を入力するとアラバマが選択され、L を入力するとルイジアナが選択されます。)

私は ttk::combobox でいくつかのバインディングを定義しようとしましたが、それを断念しました。

ttk/combobox.tcl から自由に借用した後、リストボックスを投稿してリストボックスのエントリを制限することができましたが、上下の矢印で選択を変更するバインディングを追加したため、大きな問題が発生しています。正確に言うと、選択したアイテムは問題なく移動しますがエントリ ウィジェットがフォーカスを失うと、アプリケーション全体がハングアップし、tclsh がすべての CPU を占有します。

Windows と Linux の両方で ActiveTcl 8.6 を使用して開発していますが、コードは両方のプラットフォームで同じように動作するようですが、Windows でハングしていないことを最初に確認して以来、Linux では試していません。私のコードを喜んで共有したいと思いますが、デモ スクリプトは約 450 行にも及ぶため、他の誰かがそれほど多くの投稿をしたとしても、自分で読むことはできません。

私に電球を灯すのに適切な質問をしてくれる人はいますか? この問題はタイミングの問題のように感じますが、どこから追跡を開始すればよいかわかりません。

どうもありがとう。

編集私は頭を悩ませてきましたが、 ttk::combobx を拡張する試みを放棄した理由は、既に多数のバインディングが配置されていて、一部が望ましくないことを行ったためだと思います。現在の取り組みでは、エントリ ウィジェットと Key-Up、Key-Down、FocusIn、FocusOut バインディングでvalidatecommandを使用しています。

現在のコードはこちらのペーストビンにあります。

4

1 に答える 1