在 Tcl/Tk 中下拉文本框
Drop down textbox in Tcl/Tk
这是一个数据库:
apple 20
mango 45
banana 30
我想在下拉文本框中获取这些水果的名称。
我有一个文本字段可以将水果名称添加到数据库中。
label .l1 -text "Fruits :"
entry .e1
pack .l1 .e1
label .l2 -text "Store :"
entry .e2
pack .l2 .e2
button .b1 -text "OK" -command save
pack .b1
proc save {} {
set fpR [read [open "abcd.txt"]]
set fp [open "abcd.txt" w]
puts $fp "$fpR\n[.e1 get] [.e2 get]"
}
在不关闭 GUI 的情况下添加新数据后:
apple 20
mango 45
banana 30
guava 10
现在,在不关闭 GUI 的情况下添加水果后,如何在下拉框中获取它?
这是一个使用组合框并向其中添加水果的代码片段(尽可能少地更改您的代码):
package require Tk
ttk::combobox .combo
pack .combo
# Set up proc to populate combobox
proc refresh_combo {} {
# Set up channel to read file
set fin [open abcd.txt r]
# Get all fruit names in a single list
set fruitList [lmap x [split [read $fin] "\n"] {if {$x != ""} {lindex $x 0} else {continue}}]
close $fin
.combo configure -values $fruitList
}
refresh_combo
label .l1 -text "Fruits :"
entry .e1
pack .l1 .e1
label .l2 -text "Store :"
entry .e2
pack .l2 .e2
button .b1 -text "OK" -command add_fruits
pack .b1
proc add_fruits {} {
# Open file to append new fruits
set fp [open "abcd.txt" a]
puts $fp "[.e1 get] [.e2 get]"
close $fp
refresh_combo
}
尽管在文本文件中用制表符分隔值(或其他适当的分隔符)可能会更好。如果你真的想要一个数据库,你可能会研究 sqlite 这使得检索和更新更容易。
这是一个数据库:
apple 20 mango 45 banana 30
我想在下拉文本框中获取这些水果的名称。
我有一个文本字段可以将水果名称添加到数据库中。
label .l1 -text "Fruits :" entry .e1 pack .l1 .e1 label .l2 -text "Store :" entry .e2 pack .l2 .e2 button .b1 -text "OK" -command save pack .b1 proc save {} { set fpR [read [open "abcd.txt"]] set fp [open "abcd.txt" w] puts $fp "$fpR\n[.e1 get] [.e2 get]" }
在不关闭 GUI 的情况下添加新数据后:
apple 20 mango 45 banana 30 guava 10
现在,在不关闭 GUI 的情况下添加水果后,如何在下拉框中获取它?
这是一个使用组合框并向其中添加水果的代码片段(尽可能少地更改您的代码):
package require Tk
ttk::combobox .combo
pack .combo
# Set up proc to populate combobox
proc refresh_combo {} {
# Set up channel to read file
set fin [open abcd.txt r]
# Get all fruit names in a single list
set fruitList [lmap x [split [read $fin] "\n"] {if {$x != ""} {lindex $x 0} else {continue}}]
close $fin
.combo configure -values $fruitList
}
refresh_combo
label .l1 -text "Fruits :"
entry .e1
pack .l1 .e1
label .l2 -text "Store :"
entry .e2
pack .l2 .e2
button .b1 -text "OK" -command add_fruits
pack .b1
proc add_fruits {} {
# Open file to append new fruits
set fp [open "abcd.txt" a]
puts $fp "[.e1 get] [.e2 get]"
close $fp
refresh_combo
}
尽管在文本文件中用制表符分隔值(或其他适当的分隔符)可能会更好。如果你真的想要一个数据库,你可能会研究 sqlite 这使得检索和更新更容易。