我目前正在编写我的第一个 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
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'