虽然这几乎是 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 会显示相同的行为。 我认为这实际上是一个操作系统的东西,它通常试图阻止这种上下文交换; 我认为唯一的例外是复制和粘贴缓冲区。
我相信这是 Windows 唯一的事情,但我还没有在例如 Ubuntu 上进行测试,所以欢迎您从示例中尝试sudo python multiple_dropfile.py
,或者上面的代码块之一。
关于提升的权限,我相信以管理员身份启动的cmd /c explorer
应该足以获得提升的权限,但即便如此,也存在不可行的情况,并且事件没有返回任何内容。
真的; 这可能不在 Kivy 的范围内修复; 实际上可能在 SDL 之外。 除非我们计划公开一种方法来更改 Windows 上每个 MIC 级别的消息传递过滤器; 但我也相信你在 Linux 上也会遇到类似的问题; 因为他们也开始对 sudo 进程进行更深入的分离; 即使它们以同一用户身份运行,但 sudo 和非 sudo 进程之间肯定存在差异。 因此,还必须发现 Linux 的修复程序,并且也可能会暴露出来; 但我认为这些细节应该留给程序员根据他们的问题域的需要来实现。 不过,这只是我的 2 美分。
我们可能应该只记录问题然后关闭它。
最有用的评论
我们可能应该只记录问题然后关闭它。