From: "Albert L. Wagner" Date: 2002-03-28T02:25:15+09:00 Subject: Re: Error calling Tk in a loop Here's a model to start with: require 'tk' require 'tktext' class Main def initialize @root = TkRoot.new{title 'Names and Addresses'} @root.minsize(450, 200) @doc = TkText.new(@root ).pack( 'in' => @root, 'expand' => 1, 'fill' => 'both') @doc.bind('Key') {|e| anyKeyPress(e)} end def anyKeyPress(event) keySym = event.keysym aChar = sprintf("%08X", event.keycode) keyState = sprintf("%08X", event.state) case keySym.to_s when /^[A-Za-z0-9]$/ then popitup(keySym) when 'Left' then @doc.insert('end', "left arrow pressed\n") when 'Right' then @doc.insert('end', "right arrow pressed\n") when 'Home' then @doc.insert('end', "home key pressed\n") when 'End' then @doc.insert('end', "end key pressed\n") else @doc.insert('end', "discarded '#{keySym}'\n") end event.widget.callback_break end def popitup(keySym) Tk.messageBox( 'icon' => 'info', 'type' => 'ok', 'parent' => @root, 'message' => "'#{keySym.to_s}' pressed\n") end end #class Main Main.new Tk.mainloop