Hello
In the tk reference manual i found an event called ListboxSelect.
I would like to use this to change a buttons state from :normal to :disabled or vice versa.
Say a listbox is empty. Now, edit an entry is not possible so the button should disabled.
After a few seconds the listbox get filled, the edit button should now set to normal state.
Could you post a code snippet to demonstrate this callback functionality
Thanks
Enno
Message-ID: <opssml5jeqfoz7gx@x5.linux.net>
In the tk reference manual i found an event called ListboxSelect.
(snip)
Could you post a code snippet to demonstrate this callback functionality
How about the following?
ยทยทยท
From: "Enrico Schwass" <deckard73@freenet.de>
Subject: Rubytk - How to use <<ListboxSelect>>
Date: Mon, 13 Jun 2005 04:06:24 +0900
--------------------------------------------------
require 'tk'
f = TkFrame.new.pack(:fill=>:x)
entry = TkEntry.new(f).pack(:side=>:left, :expand=>true, :fill=>:x)
b_add = TkButton.new(f, :text=>'ADD', :state=>:normal).pack(:side=>:right)
b_edit = TkButton.new(f, :text=>'EDIT', :state=>:disabled).pack(:side=>:right)
available = b_add
entry.bind('Return', proc{available.invoke})
lbox = TkListbox.new(:selectmode=>:multiple).pack(:fill=>:both, :expand=>true)
old_sel =
lbox.bind('<ListboxSelect>'){
sel = (lbox.curselection - old_sel)
if sel.empty?
entry.value = ''
b_add[:state] = :normal
b_edit[:state] = :disable
available = b_add
else
lbox.selection_clear(old_sel[0]) unless old_sel.empty?
entry.value = lbox.get(sel[0])
b_add[:state] = :disable
b_edit[:state] = :normal
available = b_edit
end
old_sel = sel
}
b_add.command{
unless (val = entry.value).empty?
lbox.insert(:end, val)
entry.value = ''
end
}
b_edit.command{
unless (val = entry.value).empty?
idx = lbox.curselection[0]
lbox.delete(idx)
lbox.insert(idx, val)
lbox.selection_set(idx)
end
}
entry.focus
Tk.mainloop
--------------------------------------------------
--
Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)