簡體   English   中英

tcltk對話框出現在RStudio / Shiny Windows下

[英]tcltk Dialog Boxes Appear Underneath RStudio/Shiny Windows

我目前正在編寫我的第一個閃亮的應用程序,並且在使用一些更微妙的用戶界面功能時遇到了一些困難。 我正在使用tcltk庫導入許多簡單對話框,以供用戶選擇本地目錄和文件(該應用程序僅將在本地運行,因此我不會使用Shiny的fileInput命令)。 這也具有不像choose.dir命令那樣特定於操作系統的優點(請參見R Windows OS選擇.dir()文件選擇器不會在工作目錄中打開以進行更多討論)。

但是,當我在Windows中工作時(盡管我在Linux中進行了大部分開發工作,但我正在Windows 10上進行測試),我發現對tkchooseDirectory的調用只會在有光澤的應用程序后面打開對話框,如果我正在運行一個閃亮的應用程序,或者在RStudio IDE的后面運行(如果我只是從那里的控制台調用它的話)。 這似乎不是一個新問題: http : //r.789695.n4.nabble.com/tkchooseDirectory-opens-dialog-below-browser-window-td4729500.html,但我還沒有看到任何解決方案。

對於我使用RStudio控制台進行的開發工作而言,這是一個小小的麻煩,但是,鑒於最終將閃亮的應用程序交付給客戶端(國家機構),我真的不希望由於應用程序隱藏對話框而使它們惡化。

感謝您提供的任何幫助!

[edit 1]進一步的信息:從RStudio控制台調用tkchooseDirectory時,僅第一次調用tkchooseDirectory會導致在應用程序后面顯示一個對話框。 隨后的調用將對話框按預期方式放置在顯示屏的頂部。 同樣,此行為在Windows版R for GUI中也不會發生,這似乎是RStudio及其關聯產品的特質。

[edit 2]看來其他tcltk庫對話框也遇到了類似的問題: R中的MessageBox

[edit 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")

我發現最好在打開對話框之前先短暫使用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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM