首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R-基于下拉列表中选择的值更新文本输入框(tkentry) (ttkcombobox)

R-基于下拉列表中选择的值更新文本输入框(tkentry) (ttkcombobox)
EN

Stack Overflow用户
提问于 2019-12-20 18:29:43
回答 1查看 194关注 0票数 2

我仍然是R和tcltk / GUI编程的新手。

这是一个简单的GUI,我希望文本输入框根据用户从下拉菜单中选择的内容更改为不同的值。

我试着寻找答案,但我只找到了提示(tkbind,tkafter),这还不足以让我知道如何实际编写代码。

这是怎么做的?

非常感谢!

更新-找到解决方案- tkbind和tkconfigure的组合-向下滚动到代码末尾,在那里我用一个有效的解决方案更新了它。

UPDATE2 - OK,所以尽管这看起来是可行的,但它破坏了我后面的代码,并且一旦按下"OK“按钮,就不会实际使用这些值。添加了下面的代码。有什么想法吗?也就是说,VariableToUse始终保持为10,即使我稍后在代码中选择了combobox值时将其设置为1。

UPDATE3 -好的,也解决了这个问题!这是我在其他地方读到的一个“级别”的东西--我只需要使用<<-而不是<-。下面更新了代码。

代码语言:javascript
复制
if (!require("tcltk2")) {
  install.packages("tcltk2", dependencies = TRUE)
  library(tcltk2)
}

#########################################################
### Parameters
#########################################################
MyEditBox <- tclVar(10)
# Default selection in dropdown
MyComboBox <- tclVar(1)
# Ok button
ret_var <- tclVar("")

#########################################################
### Button functions
#########################################################

submit <- function() {
  tclvalue(ret_var) <- "OK"
  tkdestroy(tt)
}

quit <- function() {
  tkdestroy(tt)
}


#########################################################
### BUILD GUI
#########################################################

## head line
tt <- tktoplevel(borderwidth = 20)
tkwm.title(tt, "ComboBox Test")

if(.Platform$OS.type == "windows"){
  box_length <- 63
}else{
  box_length <- 55
}
cell_width <- 3
bt_width <- 8

# Dropdown box
comboBox <- ttkcombobox(tt,values=c(1,2,3), textvariable = MyComboBox)

# Box1
box1 <- tkentry(tt, textvariable = MyEditBox, width = 6)


## submit / reset / quit 
submit_button <- tkbutton(tt, text = "Go ...", command = submit)
quit_button <- tkbutton(tt, text = "Quit", command = quit)


#########################################################
### Display GUI
#########################################################

tkgrid(tklabel(tt, text = ""),tklabel(tt, text = "Select a value:"))


tkgrid(tklabel(tt, text = "\n"), padx = cell_width)  # leave blank line

tkgrid(tklabel(tt, text = "Select Something:"), comboBox, padx = cell_width)

tkgrid(tklabel(tt, text = "\n"), padx = cell_width)  # leave blank line

tkgrid(tklabel(tt, text = "Box To Update:"), box1, padx = cell_width)
tkgrid(tklabel(tt, text = "\n"), padx = cell_width)  # leave blank line

### Go and Quit buttons
tkgrid(tklabel(tt, text = ""), submit_button, quit_button, padx = cell_width)

tkgrid.configure(quit_button, sticky = "w")

    tkbind(comboBox, "<<ComboboxSelected>>", function() {
       if (tclvalue(MyComboBox)==1){      
       # Change the value           
       MyEditBox <<- tclVar(1)
       # Update the GUI
       tkconfigure(box1,textvariable = MyEditBox)
      }
    })

tkwait.window(tt)


########################
### Go button pressed
########################

if (tclvalue(ret_var) == "OK") {
  VariableToUseLater <- tclvalue(MyEditBox)
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-12-20 21:29:23

好了,我找到了我需要的命令:

代码语言:javascript
复制
# Set the value
MyEditBox <<- tclVar(1)
# Show in GUI
tkconfigure(box1, textvariable=MyEditBox)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59423727

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档