【问题标题】:tcltk Dialog Boxes Appear Underneath RStudio/Shiny Windowstcltk 对话框出现在 RStudio/Shiny Windows 下
【发布时间】:2018-03-09 12:18:07
【问题描述】:

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

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

对于我使用 RStudio 控制台的开发工作来说,这是一个小麻烦,但鉴于闪亮的应用程序最终将交付给客户端(国家机构),我真的不想因为隐藏对话框而加剧它们由应用程序。

感谢您提供的任何帮助!

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

[编辑 2] 其他 tcltk 库对话框似乎也遇到过类似问题:MessageBox in R

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

library(tcltk2)
tkchooseDirectory()

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

【问题讨论】:

  • 您介意分享一个可重现的最小示例吗?
  • @erocoar 刚刚在问题中添加了一个最小示例。显然,这是特定于 Window 和特定于 RStudio 的,因此只能在那里重现。

标签: r shiny rstudio tcltk


【解决方案1】:

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

一种选择是打开toplevel 窗口,然后在其顶部打开目录对话框(您必须在此处一次运行所有内容,否则root 将再次在后台运行)。

library(tcltk2)

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

另一种选择是使用gWidgets

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

【讨论】:

  • 非常感谢您的帮助,我认为您可能是对的,可能没有通用的解决方案。不幸的是,我发现您的第一个解决方案仍然导致对话框显示在 RStudio/Shiny 后面。使用gWidgets 的第二种解决方案在使用 TCL/TK GUI 工具包时也会导致 RStudio/Shiny 应用程序后面出现对话框,但我将尝试使用其他工具包之一。希望这能解决问题。
  • 我已将您的回复标记为答案,因为我认为这可能是我们能够设法找到解决方案的最接近的方法。感谢您的宝贵时间。
【解决方案2】:

我发现最好在打开对话框之前暂停使用 Sys.sleep:

root = tktoplevel("width" = 1, "height" = 1)
tkraise(root)
Sys.sleep(1) #pause just a little for dailogs
selectedDir <- 
  tclvalue(tkchooseDirectory(
    initialdir=getwd(),
    title="Select directory"))
tkdestroy(root)

【讨论】:

    猜你喜欢
    • 2017-09-29
    • 2014-01-31
    • 2017-04-08
    • 2017-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-27
    • 1970-01-01
    相关资源
    最近更新 更多