R Tcl/Tk: OnReset不工作后OnSubmit



在下面的代码中,我想重置输入字段,但是一旦我点击提交按钮,我就不能再重置它们了。如果我在提交按钮之前重置,那么一切都没问题。我错过了什么?

library(tcltk);
doneInput <- tclVar(0)
tkwindow <- tktoplevel();
l.directory <- tklabel (tkwindow, text = "directory path: ");
l.folder1 <- tklabel (tkwindow, text = "folder name: ");
l.folderO <- tklabel (tkwindow, text = "folder name: ");
o.directory <- tclVar("Enter directory path ...");
o.folder1 <- tclVar("Enter folder name ...");
o.folderO <- tclVar("Enter folder name ...");
e.directory <- tkentry (tkwindow, textvariable = o.directory);
e.folder1 <- tkentry (tkwindow, textvariable = o.folder1);
e.folderO <- tkentry (tkwindow, textvariable = o.folderO);
tkgrid (l.directory, e.directory);
tkgrid (l.folder1, e.folder1);
tkgrid (l.folderO, e.folderO);
tkgrid.configure (l.directory, l.folder1, l.folderO, sticky="e");
tkgrid.configure (e.directory, e.folder1, e.folderO, sticky="w");
OnReset <- function()
{
    tclvalue (o.directory) <<- "path ...";
    tclvalue (o.folder1) <<- "name ...";
    tclvalue (o.folderO) <<- "name ...";
    tkconfigure (b.submit, state = "normal");
}
b.reset <- tkbutton (tkwindow, text = "Reset", command = OnReset)
OnSubmit <- function()
{
    o.directory <<- tclvalue (o.directory);
    o.folder1 <<- tclvalue (o.folder1);
    o.folderO <<- tclvalue (o.folderO);
    print (o.directory);
    print (o.folder1);
    print (o.folderO);
    if (nchar (o.directory) > 0 && 
        nchar (o.Folder1) > 0 &&
        nchar (o.FolderO) > 0)
        tclvalue (doneInput) <- 1;
}
b.submit <- tkbutton (tkwindow, text = "Submit", command = OnSubmit);
tkgrid (b.submit, b.reset, sticky="e", padx=10, pady=10);
tkwait.variable (doneInput)
print (paste ("directory: ", o.directory));
print (paste ("folder1: ", o.folder1));
print (paste ("folderO: ", o.folderO));

这里的问题是在函数内部使用的<<-运算符(例如,o.directory <<- tclvalue (o.directory);等)。用<-代替它们可以解决你的问题。

保持其他一切相同,如果您将OnResetOnSubmit函数更改为以下内容,您应该得到预期的结果:

OnReset <- function()
{
    tclvalue (o.directory) <- "path ...";
    tclvalue (o.folder1) <- "name ...";
    tclvalue (o.folderO) <- "name ...";
    tkconfigure (b.submit, state = "normal");
}
OnSubmit <- function()
{
    a <- tclvalue (o.directory);
    b <- tclvalue (o.folder1);
    c <- tclvalue (o.folderO);
    print (a);
    print (b);
    print (c);
    if (nchar (a) > 0 && 
        nchar (b) > 0 &&
        nchar (c) > 0)
        tclvalue (doneInput) <- 1;
}

最新更新