私はいくつかのリストに基づいてクイックパネルを生成し、ユーザーがアイテムを選択するのを待ってから、その値に基づいてアクションを実行する単純なプラグインを作成しようとしています選択された。基本的に、私は次の操作を行いたいのですが:サブライム3プラグインクイックパネルリターンバルブを格納する
class ExampleCommand(sublime_plugin.TextCommand):
def __init__(self):
self._return_val = None
self._list = ['a', 'b', 'c']
def callback(self, idx)
self._return_val = self._list[idx]
def run(self):
sublime.active_window().show_quick_panel(
options, self.callback)
if self._return_val == 'a'
// do something
しかし、何も前show_quick_panelリターンが選択されているので、self._return_valは、if文の実行後まで、選択したインデックスに割り当てられません。
どうすればこの問題を解決できますか?イベントリスナーとは?私はPythonとSublimeプラグインの開発にはとても新しいです。
内部関数( 'run()'の中で 'on_select()を定義する)はPythonでは時に便利ですが、この場合コールバックを定義する理由はありません。[このページ](https://realpython.com/blog/python/inner-functions-what-are-they-good-for/)では、内部関数をいつ、そしていつ、なぜ使うべきかについて非常によく説明しています。 Gerard Rocheの答えには、基本的な 'show_quick_panel()'と 'EnableColorSchemeCommand'クラスをリンクするページの' text' *の例があります。 – mattst
@mattstフィードバックとリンクをありがとう。私が同意している間、彼の答えは有用で正しいです(彼が既にそこにいた場合は私の答えを追加しませんでした)。私は、引数を渡す方法が間違っている可能性があることを指摘しなければなりません。 'WindowCommand'または' ApplicationCommand' *と*を使用してフラグ 'sublime.KEEP_OPEN_ON_FOCUS_LOST'を設定すると、同時に2つのクイックパネルを開くことができます。同じウィンドウにある場合は、最初のアイテムを開くと上のアイテムが上書きされます。これはTextCommandや内部関数/クロージャーやフラグなしでは起こりません。 –
この問題は再現できません[コード参照](https://gist.github.com/mattst/1a7a194a76dd8e4f34b86cd3c3ff048c)。私はバグが修正されていると思います。今すぐ 'KEEP_OPEN_ON_FOCUS_LOST'でクイックパネルが作成され、同じビュー(または同じグループ内の別のビュー)で別のクイックパネルを開こうとすると、 'クイックパネルが利用できません'というコンソールメッセージと元のクイックパネルパネルは必要に応じて動作し続けます。別のグループで追加のクイックパネルを開くことができます。その場合はすべて表示され、すべてが正しく動作します。使用方法:ST 3126 – mattst