这是一个数据库:
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的情况下添加水果后,我怎样才能在下拉框中找到它?
答案 0 :(得分:0)
这是一个代码段(代码更改尽可能少),它使用了一个组合框并为其添加了水果:
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,这样可以更轻松地进行检索和更新。