2013-05-30 31 views
5

Điều này có lẽ rất đơn giản, tôi sẽ rạn nứt khi câu trả lời trở lại nhưng tôi hoàn toàn bối rối. Tôi đã thử các hướng dẫn sử dụng, cố gắng tìm kiếm trên web, các ví dụ các loại và bất cứ điều gì khác mà tôi có thể nghĩ đến. Tôi vẫn còn bị mắc kẹt.Lấy dữ liệu ra khỏi chức năng tcltk

Tôi đang cố tạo một đầu vào đơn giản để người dùng thêm hai giá trị sau đó tôi có thể sử dụng trong phần còn lại của tập lệnh R. Tôi cần kịch bản để tạm dừng và chờ cho đầu vào từ người sử dụng và sau đó tiếp tục cùng một khi nó được đầu vào (như cách chọn chức năng tập tin). AFter đọc một loạt các công cụ tôi quyết định sử dụng thư viện (tcltk). Tôi có một hộp nhỏ đẹp trong một hàm.

inputs <- function(){ 

    xvar <- tclVar("") 
    yvar <- tclVar("") 

    tt <- tktoplevel() 
    tkwm.title(tt,"Input Numbers") 
    x.entry <- tkentry(tt, textvariable=xvar) 
    y.entry <- tkentry(tt, textvariable=yvar) 

    reset <- function() 
    { 
    tclvalue(xvar)<-"" 
    tclvalue(yvar)<-"" 
    } 

    reset.but <- tkbutton(tt, text="Reset", command=reset) 

    submit <- function() { 
    x <- as.numeric(tclvalue(xvar)) 
    y <- as.numeric(tclvalue(yvar)) 
    print(x) 
    print(y) 
    tkdestroy(tt) 
    } 
    submit.but <- tkbutton(tt, text="submit", command=submit) 

    tkgrid(tklabel(tt,text="Enter Two Inputs"),columnspan=2) 
    tkgrid(tklabel(tt,text="Input1"), x.entry, pady = 10, padx =10) 
    tkgrid(tklabel(tt,text="Input2"), y.entry, pady = 10, padx =10) 
    tkgrid(submit.but, reset.but) 

    } 

Khi tôi gõ vào:

inputs() 

Hộp chút thoải mái bật lên và tôi có thể nhập vào giá trị của tôi, nói 3 và 4 cho ví dụ này.

tôi nhận được lại

<Tcl> 
[1] 3 
[1] 4 

Tôi muốn sử dụng những số trong một phần tiếp theo của mã R. Làm thế nào để tôi có được chúng để tôi có thể nhận được tương đương với điều này?

input1 <- 3 
input2 <- 4 

Cảm ơn bạn đã trợ giúp.

Trả lời

7

Đây là một sửa đổi chức năng của bạn:

inputs <- function(){ 

    xvar <- tclVar("") 
    yvar <- tclVar("") 

    tt <- tktoplevel() 
    tkwm.title(tt,"Input Numbers") 
    x.entry <- tkentry(tt, textvariable=xvar) 
    y.entry <- tkentry(tt, textvariable=yvar) 

    reset <- function() 
    { 
    tclvalue(xvar)<-"" 
    tclvalue(yvar)<-"" 
    } 

    reset.but <- tkbutton(tt, text="Reset", command=reset) 

    submit <- function() { 
    x <- as.numeric(tclvalue(xvar)) 
    y <- as.numeric(tclvalue(yvar)) 
    e <- parent.env(environment()) 
    e$x <- x 
    e$y <- y 
    tkdestroy(tt) 
    } 
    submit.but <- tkbutton(tt, text="submit", command=submit) 

    tkgrid(tklabel(tt,text="Enter Two Inputs"),columnspan=2) 
    tkgrid(tklabel(tt,text="Input1"), x.entry, pady = 10, padx =10) 
    tkgrid(tklabel(tt,text="Input2"), y.entry, pady = 10, padx =10) 
    tkgrid(submit.but, reset.but) 

    tkwait.window(tt) 
    return(c(x,y)) 
} 

Bây giờ chạy các chức năng như:

myvals <- inputs() 

Bây giờ nhập 2 giá trị của bạn và bấm vào nút "Gửi", sau đó nhìn vào biến myvals, nó chứa 2 giá trị của bạn.

+0

Oh hoàn hảo! Đã khắc phục sự cố của tôi. CẢM ƠN BẠN!!! –

1

Bạn có họ trong quá trình gửi lại cuộc gọi - bạn chỉ cần đặt chúng ở đâu đó. Đôi khi các biến toàn cầu là tốt nhất cho việc này. Chỉ cần sử dụng < < - để gán cho chúng để các ràng buộc xảy ra bên ngoài phạm vi của cuộc gọi gửi lại. Bạn cũng có thể sử dụng một môi trường cho mục đích này hoặc thậm chí là một lớp tham chiếu.

+1

Ồ ... bạn có thể giải thích rằng chỉ một chút nữa thôi. Tôi làm cách nào để gửi "gọi lại" và làm cách nào để sử dụng << - –

Các vấn đề liên quan