从另一个应用程序通过 Rscript 启动后,如何将 R Tk 窗口置于前面?

2024-04-11

我有一个脚本,大致如下:

if (!require(tcltk2)) {install.packages('tcltk2', repos="http://cran.us.r-project.org"); require(tcltk2)}

base <- NULL
done <- tclVar(0)

quasitelgui <- function(inputfile = NULL)
{
    base <- tktoplevel()
    tkwm.title(base, "QuasiTel")

    # Files
    file.frm <- tkframe(base, borderwidth=2)
    datafile.lbl <- tklabel(file.frm, text="Data")
    datafile.entry <- tkentry(file.frm, state="readonly")
    datafile.btn <- tkbutton(file.frm, text="Browse...")
    tkgrid(datafile.lbl, datafile.entry, datafile.btn)
    tkgrid.configure(datafile.lbl, sticky="e")
    tkgrid.configure(datafile.entry, sticky="ew", padx=1)
    tkgrid.columnconfigure(file.frm, 1, weight=1)
    tkgrid(file.frm)
    tkgrid.configure(file.frm, sticky="ew")

    # Main
    main.frm <- tkframe(base, borderwidth=2)
    g1.lbl <- tklabel(main.frm, text="Group 1")
    g2.lbl <- tklabel(main.frm, text="Group 2")
    tkgrid(g1.lbl, g2.lbl)

    q.btn <- tkbutton(bott.frm, text="Quit", command=function() tclvalue(done) <- 1)
    tkbind(base,"<Destroy>", function() tclvalue(done) <- 2)
    tkgrid(filter.lbl, columnspan=2)
    tkgrid(filter.entry)
    tkgrid(ok.btn, q.btn)
    tkgrid.configure(ok.btn, q.btn, padx=1)
    tkgrid(bott.frm)
    tkgrid.columnconfigure(base, 0, weight=1)

    if (length(inputfile) > 0) { datafile.open(inputfile) }
}

cmd.args <- commandArgs(trailingOnly=TRUE)

if (length(cmd.args) > 0) {
    quasitelgui(gsub("\\\\", "/", cmd.args[1]))
} else {
    quasitelgui()
}

tkfocus(base)
tkwait.variable(done)
tkdestroy(base)

我通过另一个 GUI 的 rscript 运行它。我希望窗口在启动时抓住焦点。 Tkfocus 不这样做。


不是聚焦,而是提高:

> library(tcltk)
Loading Tcl/Tk interface ... done
> w1 <- tktoplevel()
> w2 <- tktoplevel()
> tkraise(w1)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从另一个应用程序通过 Rscript 启动后,如何将 R Tk 窗口置于前面? 的相关文章

随机推荐