# # Host name lookup widget. # require 'tk' require 'socket' # Set colors. BG = '#AAAAFF' TkOption.add('*background', BG) TkOption.add('*activeBackground', '#CCCCFF') TkOption.add('*foreground', '#884400') # A label which does the needed lookup. class HostnameLabel < TkLabel # Look up host name in the assocated entry widget source, and display # in ourselves. def show hn = @source.get.strip if hn == '' ip = '' else begin ip = IPSocket.getaddress(hn) rescue ip = '[unknown]' end end configure('text' => ip) end # Create the widget, and bind the return key to run the lookup method (show). def initialize(root, entry) super(root, 'text' => '', 'width' => 15) @source = entry entry.bind('Return', proc { self.show }) end end # Root window root = TkRoot.new('background' => BG) { title 'Host Conversion' } # Title label tit = TkLabel.new { text "Host Name Conversion" relief 'groove' grid('row' => 0, 'column' => 0, 'columnspan' => 2, 'sticky' => 'news') } # Name entry. entr = TkEntry.new { width 25 grid('row' => 1, 'column' => 0, 'columnspan' => 2, 'sticky' => 'news') } dislab = nil # This needs to exist since we refer to it in the bind. entr.bind('Button-1', proc { |e| entr.delete(0,'end') dislab.configure('text' => '') }) # Reporting label. dislab = HostnameLabel.new(root, entr) dislab.grid('row' => 2, 'column' => 0, 'sticky' => 'news') # Go button. but = TkButton.new { text "Find" command { dislab.show } grid('row' => 2, 'column' => 1, 'sticky' => 'news') } Tk.mainloop