これはほとんどSDL2のみの問題ですが、少なくともドキュメントで言及する必要があります。 バグトラッカーで関連する問題を見つけることができないので、誰かがすでにそこに登録されている場合は、それらを突くか、マスター/トランクブランチで修正されていないかどうかを確認すると便利です。
from kivy.app import runTouchApp
from kivy.core.window import Window
def _drop(window, file_path):
print(file_path)
Window.bind(on_dropfile=_drop)
runTouchApp()
SDL2の例
#include <SDL2/SDL.h>
int main() {
SDL_Init(SDL_INIT_EVERYTHING);
SDL_Window *window = SDL_CreateWindow(
"Drag-and-Drop",
SDL_WINDOWPOS_UNDEFINED,
SDL_WINDOWPOS_UNDEFINED,
800, 600, SDL_WINDOW_SHOWN
);
int running = 1;
while (running) {
SDL_Event event;
while (SDL_PollEvent(&event)) {
switch (event.type) {
case SDL_DROPFILE:
printf("Dropped file: %s\n", event.drop.file);
break;
case SDL_QUIT:
running = 0;
break;
}
}
}
SDL_DestroyWindow(window);
SDL_Quit();
}
しかし、昇格されたアクセス許可ウィンドウからもファイルを削除しましたか? それが問題があることを確認するために; Windowsエクスプローラー/ファイルブラウザーも昇格されたアクセス許可で開きます。 私が想像するように、Linuxは同じ動作を示します。 私は、実際には、そのようなコンテキスト交換を一般的に防止しようとするのはOSのものだと思います。 唯一の例外を除いて、私はコピーアンドペーストバッファであると信じています。
これはWindowsだけだと思いますが、Ubuntuなどではテストしていないので、例のsudo python multiple_dropfile.py
、または上記のコードブロックの1つを試してみてください。
昇格されたアクセス許可については、管理者として起動されたcmd /c explorer
で昇格されたアクセス許可を取得するのに十分であると思いますが、それでも問題はなく、イベントから何も返されません。
本当に; これはおそらく修正するKivyのドメインにはありません。 実際、おそらくSDLの範囲外です。 これは、WindowsでMICレベルごとにメッセージパッシングフィルターを変更する方法を公開する予定がない限りです。 しかし、Linuxでも同様の問題が発生すると思います。 彼らもsudoプロセスのより深い分離を始めたので; 同じユーザーとして実行されている場合でも、sudoプロセスと非sudoプロセスには間違いなく違いがあります。 したがって、Linuxの修正も発見する必要があり、おそらく公開する必要があります。 しかし、そのような詳細は、問題のドメインに必要に応じて実装するためにプログラマーに任せるべきだと思います。 それは私の2セントです。
おそらく、問題を文書化してから閉じる必要があります。
最も参考になるコメント
おそらく、問題を文書化してから閉じる必要があります。