我仍然是R和tcltk / GUI编程的新手。
这是一个简单的GUI,我希望文本输入框根据用户从下拉菜单中选择的内容更改为不同的值。
我试着寻找答案,但我只找到了提示(tkbind,tkafter),这还不足以让我知道如何实际编写代码。
这是怎么做的?
非常感谢!
更新-找到解决方案- tkbind和tkconfigure的组合-向下滚动到代码末尾,在那里我用一个有效的解决方案更新了它。
UPDATE2 - OK,所以尽管这看起来是可行的,但它破坏了我后面的代码,并且一旦按下"OK“按钮,就不会实际使用这些值。添加了下面的代码。有什么想法吗?也就是说,VariableToUse始终保持为10,即使我稍后在代码中选择了combobox值时将其设置为1。
UPDATE3 -好的,也解决了这个问题!这是我在其他地方读到的一个“级别”的东西--我只需要使用<<-而不是<-。下面更新了代码。
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)
}发布于 2019-12-20 21:29:23
好了,我找到了我需要的命令:
# Set the value
MyEditBox <<- tclVar(1)
# Show in GUI
tkconfigure(box1, textvariable=MyEditBox)https://stackoverflow.com/questions/59423727
复制相似问题