r - tcltk 对话框出现在 RStudio/Shiny Windows 下

我目前正在编写我的第一个 Shiny 应用程序,但我在使用一些更微妙的用户界面功能时遇到了一些困难。我正在使用 tcltk 库导入一些简单的对话框,供用户选择本地目录和文件(该应用程序只会在本地运行,所以我不会使用 shiny 的 fileInput 命令)。这也具有不像 choose.dir 命令那样特定于操作系统的优点(有关更多讨论,请参阅 R Windows OS choose.dir() File chooser won't open at working directory)。

但是,当我在 Windows 中工作时(我在 Windows 10 上进行测试,尽管我在 Linux 中完成大部分开发工作),我发现调用 tkchooseDirectory 只会打开 Shiny 应用程序后面的对话框,如果我正在运行一个 Shiny 的应用程序,或者如果我只是从那里的控制台调用它,则在 RStudio IDE 后面。这似乎不是一个新问题:http://r.789695.n4.nabble.com/tkchooseDirectory-opens-dialog-below-browser-window-td4729500.html但我还没有看到任何解决方案。

对于我使用 RStudio 控制台进行的开发工作,这是一个小麻烦,但是,考虑到 Shiny 的应用程序最终将交付给客户(国家机构),我真的不想通过隐藏对话框来加重它们由应用程序。

感谢您提供的任何帮助!

[edit 1] 更多信息:似乎从 RStudio 控制台调用 tkchooseDirectory 时,只有第一次调用 tkchooseDirectory 会导致在应用程序后面显示一个对话框。后续调用按预期将对话框放置在显示的顶部。此外,这种行为不会发生在 R for Windows GUI 中,并且似乎是 RStudio 及其相关产品所特有的。

[edit 2] 看来其他人也遇到过与其他 tcltk 库对话框类似的问题:MessageBox in R

[编辑 3] 最简单的最小示例是运行:

library(tcltk2)
tkchooseDirectory()

在 Windows 10 系统上的 RStudio 控制台中。

最佳答案

所以,不幸的是,我认为没有直接的解决方案...

一个选项是打开一个toplevel 窗口,然后是它上面的目录对话框(你必须在这里一次运行所有的东西,否则root 在再次作为背景)。

library(tcltk2)

root = tktoplevel("width" = 1, "height" = 1)
tkraise(root)
tkchooseDirectory("-parent", root)

另一种选择是使用 gWidgets

dir_ <- gWidgets::gfile(type = "selectdir")

https://stackoverflow.com/questions/49193678/

相关文章:

kubernetes - 是否可以在同一端口上使用 nodeport 类型的 2 个不同 names

php - 错误:[8] PDO::__construct():发送 5 个字节失败,errno=3

java - 强制执行以避免循环依赖

react-native - react 导航 : stack navigator with tab

amazon-web-services - AWS Batch 可以运行 Windows Docke

java - 如何更改 azure-functions-maven-plugin 的日志记录级别?

">javascript - 在 Firefox 中隐藏 <input type ="date">

python - 模块 'site' 没有属性 'getusersitepackages'

python-sphinx - 如何在 python-sphinx 中突出显示文本?

hibernate - QueryDSL - 仅比较 dateTime 中的日期