【问题标题】:Active window in RR中的活动窗口
【发布时间】:2017-10-26 19:36:27
【问题描述】:

我对 Microsoft Windows 中的 R 有疑问。

当我使用 source('script_file') 从“R 控制台”(Rgui) 运行脚本时,我的脚本创建了一个图形设备,我使用 bringToTop() 在两个窗口之间切换焦点:

dev.new() # create the graphic device window, and this new window takes the focus
 ...
bringToTop(-1) # give back the focus to the 'R console' window
 ...
bringToTop(2) # give the focus to the graphic device window

当我的 R 脚本通过 tcltk2 库创建 GUI 窗口时,我无法使 GUI 窗口聚焦:“R 控制台”仍然是活动窗口,我必须单击 GUI 窗口将其激活。

library(tcltk2)
 ...
win1 <- tktoplevel()
tktitle(win1) <- "GUI window"
tkwm.geometry(win1, '300x200+100+100')

请注意,如果前面的脚本在 Linux 中运行,TK 顶层窗口将获得焦点。

当我从“R 控制台”加载“R Commander”时:

library(Rcmdr)

“R Commander”GUI 成为活动窗口。我想“R Commander”GUI 使用 tcltk2 库:“R Commander”窗口如何从“R 控制台”窃取焦点?

【问题讨论】:

  • 能否提供示例代码。另外,您可能想阅读stackoverflow.com/help/how-to-ask
  • 您知道,通常情况下,您完全受制于操作系统的实际操作和接收击键?尽管有一些方法可以添加提示,但主要取决于用户哪个主窗口获得焦点,而不是应用程序。 (你需要知道 tcltk2 库的人,这与 Tcl 完全不同,因此超出了我的专业知识。)
  • Mathieu,我编辑了文本并提供了示例代码:有帮助吗?
  • Donal,我知道操作系统会影响结果。我尝试使用tkfocus()tkraised(),但没有成功。使用tcl("wm", "attributes", base, topmost=TRUE),我的 GUI 窗口始终位于顶部,但它没有聚焦:我必须单击它才能激活。既然 Rcommander 完成了这项工作,我也想做同样的事情。

标签: r user-interface focus tk


【解决方案1】:

它并不优雅,但它有效:

info_sys <- Sys.info()

if (info_sys['sysname'] == 'Windows') {
 shell("powershell -command [void] [System.Reflection.Assembly]::LoadWithPartialName('Microsoft.VisualBasic') ; [Microsoft.VisualBasic.Interaction]::AppActivate('GUI window') ")
}

【讨论】:

    猜你喜欢
    • 2013-04-03
    • 2019-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多