Tkinter.event.widget: handler gets name instead of widget.

Discussion in 'Python' started by Frederic Rentsch, Jul 8, 2012.

  1. Hi widget wizards,

    The manual describes the "event" attribute "widget" as "The widget
    which generated this event. This is a valid Tkinter widget instance, not
    a name. This attribute is set for all events."
    Ans so it is--has been until on the latest occasion "event.widget" was
    not the widget, but its name, crashing the handler.
    # Here I build a list of selectable records having each four fields.
    # The fields are labels. The selectable line is a frame containing the
    # labels side by side. The line frames go into self, which is a Frame.

    for n in range (len (records)):
    record = records [n]
    line_frame = Frame (self, name = '-%d-' % n, relief = RAISED, **BUTTON_FRAME_)
    line_frame.bind ('<Enter>', self.enter)
    line_frame.bind ('<Leave>', self.leave)
    line_frame.bind ('<ButtonRelease-1>', self.pick_record)
    line_frame.bind ('<ButtonRelease-3>', self.info_profile)
    line_frame.grid (row = n+2, column = 1)
    for i in self.range_n_fields: # (0, 1, 2, 3)
    field = Label (line_frame, text = record [self.INDICES ], anchor = W, width = self.COLUMN_WIDTHS , **DB_LIST_LABEL_)
    field.grid (row = 0, column = i, sticky = NW)

    # Here is the <Enter> handler:

    def enter (self, event):
    w = event.widget
    print 'hit list.enter (). Event, widget', event, w, w.__class__ # Tracing line
    w.config (bg = SELECTED_BG_COLOR)

    # And here is what comes out. The first line is my tracing line. The name is correct in that it
    # names the entered line_frame, but is wrong because it should be the line_frame, not its name.
    # The rest is the red exception message:

    hit list.enter (). Event, widget <Tkinter.Event instance at 0x9115dcc> .main-frame.data-frame.title-hit-list.-10- <type 'str'>
    Exception in Tkinter callback
    Traceback (most recent call last):
    File "/usr/lib/python2.6/lib-tk/Tkinter.py", line 1413, in __call__
    return self.func(*args)
    File "/home/fr/python/finance/piam/hit_list.py", line 83, in enter
    w.config (bg = SELECTABLE_BG_COLOR)
    AttributeError: 'str' object has no attribute 'config'

    # The same thing happens with <Leave>. The other handlers I haven't done yet. The same bindings work well in
    # a Menu class with the difference that the bindings are on the Labels, not a containing Frame.

    # Dell E6500, Ubuntu 10.04, Python 2.6


    Frederic
    Frederic Rentsch, Jul 8, 2012
    #1
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Jeff Epler
    Replies:
    0
    Views:
    491
    Jeff Epler
    Aug 20, 2004
  2. Replies:
    1
    Views:
    682
    Damien
    Feb 22, 2007
  3. K Viltersten
    Replies:
    0
    Views:
    364
    K Viltersten
    Aug 22, 2009
  4. Terry Reedy
    Replies:
    15
    Views:
    607
    Frederic Rentsch
    Jul 16, 2012
  5. Frederic Rentsch
    Replies:
    0
    Views:
    414
    Frederic Rentsch
    Jul 9, 2012
Loading...

Share This Page