使用RGtk2的GUI:清除帧

时间:2015-07-31 14:28:21

标签: r user-interface gtk2

我是RGtk2和GUI编程的新手,所以我希望我的问题不是一件容易的事。

我正在尝试创建一个GUI,我想在其中导入某种.RData并使用它们,最后返回一些图。由于我想要导入的数据集可能会不时更改,我决定在菜单栏工具栏中添加一个函数LOAD,它会重现命令&#34 ;负载" R. 加载工作区后,我添加了一些检查按钮以确定要使用的数据集和 remove-function ,它可以删除对象继承自先前加载的.RData文件。

以下是两个回调的代码:

# Number of companies & maximum number of companies
numb_comp <- 0
max_length <- 30

# Table Check for Companies
list_check <- vector('list', length=max_length)



### Implementing the callbacks

open_cb <- function(widget, window){
    dialog <- gtkFileChooserDialog("Load a WorkSpace", window, "open",
        "gtk-cancel", GtkResponseType["cancel"], "gtk-open",
        GtkResponseType["accept"])
    want_to_load <- FALSE
    if (dialog$run() == GtkResponseType["accept"])want_to_load <- TRUE
    if (!want_to_load) dialog$destroy()
    else {
        load(dialog$getFilename(),.GlobalEnv)
        eval.parent(substitute(numb_comp <- length(names)))

        table_col <- 6
        table_row <- ceiling(numb_comp/table_col)
        table_check <- gtkTable(rows=table_row,columns=table_col,homogeneous=TRUE)
        l_check <- vector('list',length=numb_comp)

        for (i in 1:length(names)){
            button <- gtkCheckButton(names[i])
            table_check$attach(button, (i-1)%% table_col, ((i-1)%% table_col) + 1,
                    floor((i-1)/table_col), floor((i-1)/table_col)+1)
            l_check[[i]] <- button
            rm(button)
            }
        frame_check$add(table_check)
        eval.parent(substitute(list_check <- l_check))
        statusbar$push(info, paste(" WorkSpace", basename(dialog$getFilename()), 
        "loaded!",sep=" "))
        }
    dialog$destroy()
    }



remove_cb <- function(widget, window){
    dialog <- gtkMessageDialog(main_win,"destroy-with-parent", "question", "yes-no",
        "Do you really want to remove the WorkSpace?")
    want_to_remove <- FALSE
    if (dialog$run() == GtkResponseType["yes"])want_to_remove <- TRUE
    if (!want_to_remove) dialog$destroy()
    else {
            eval.parent(substitute(numb_comp <- 0))
        frame_check$remove(table_check)
        table_col <- 6
        table_row <- ceiling(numb_comp/table_col)
        table_check <- gtkTable(rows=table_row,columns=table_col,homogeneous=TRUE)
        for (i in 1:length(names)){
            rien <- gtkLabel("a")
            table_check$attach(rien, (i-1)%% table_col, ((i-1)%% table_col) + 1,
                    floor((i-1)/table_col), floor((i-1)/table_col)+1)
            }
        frame_check$add(table_check)
        rm(list=c("files","ICDatasetRel","names","shortnames"),inherits=TRUE)
        eval.parent(substitute(list_check <- vector('list',length=0)))
        statusbar$push(info, " Workshop removed.")
        }

    dialog$destroy()
    }

这是我尝试删除使用函数 open_cp 时创建的表。但是我看到它不起作用。

因此,我有两个问题:

  1. 由于检查按钮是在一个函数中创建的,我决定使用一种&#34;通过引用调用&#34; (当 open_cb 例程死亡时,请参阅 eval.parent(substitute(list_check&lt; -l_check)))来控制它们。这是个好主意吗?或者有更好的解决方案吗?我需要知道哪些按钮被激活以决定应该考虑哪个数据集。

  2. 使用我称之为 remove_cb 的函数,我将销毁LOAD操作带来的所有对象,但我还要更改&#34;物理方面&#34;的GUI。换句话说,我想清除实际的帧或用一个重叠的帧(没有按钮)替换它。可能吗?如果是,怎么做?

  3. 非常感谢任何帮助。

0 个答案:

没有答案