Skip to content

Add support for the new data option supported by event generate (Tk 8.5) #47655

Description

@gpolo
mannequin
BPO 3405
Nosy @mkiever, @mark-summerfield, @asvetlov, @serhiy-storchaka
PRs
  • gh-47655: Add support for user data of Tk virtual events to tkinter #7142
  • Files
  • event_generate__data2.diff
  • Note: these values reflect the state of the issue at the time it was migrated and might not reflect the current state.

    Show more details

    GitHub fields:

    assignee = None
    closed_at = None
    created_at = <Date 2008-07-18.12:52:45.025>
    labels = ['type-feature', 'expert-tkinter']
    title = 'Add support for the new data option supported by event generate (Tk 8.5)'
    updated_at = <Date 2018-05-29.14:18:00.977>
    user = 'https://bugs.python.org/gpolo'

    bugs.python.org fields:

    activity = <Date 2018-05-29.14:18:00.977>
    actor = 'mkiever'
    assignee = 'none'
    closed = False
    closed_date = None
    closer = None
    components = ['Tkinter']
    creation = <Date 2008-07-18.12:52:45.025>
    creator = 'gpolo'
    dependencies = []
    files = ['10948']
    hgrepos = []
    issue_num = 3405
    keywords = ['patch']
    message_count = 8.0
    messages = ['69951', '70040', '127658', '165234', '165254', '315621', '315624', '318035']
    nosy_count = 7.0
    nosy_names = ['mkiever', 'mark', 'gpolo', 'asvetlov', 'dghjfrdj', 'serhiy.storchaka', 'alex.rodas']
    pr_nums = ['7142']
    priority = 'normal'
    resolution = None
    stage = 'patch review'
    status = 'open'
    superseder = None
    type = 'enhancement'
    url = 'https://bugs.python.org/issue3405'
    versions = ['Python 3.4']

    Activity

    1. gpolo commented on Jul 18, 2008

      gpolomannequin
      MannequinAuthor

      Follows a patch that adds support for the new data option supported
      event generate. It allows virtual events to pass a tcl object.

      This patch is only intended to correctly support tcl objects, trying to
      pass other objects (like a dict) will result in None being returned. If
      you want to correctly pass and receive a dict, make it an attribute of
      the tcl object being passed.

      E.g.:

      import Tkinter
      
      def handle_it(event):
          print event.data.something
      
      root = Tkinter.Tk()
      root.something = {1: 2}
      root.after(1, lambda: root.event_generate('<<Test>>', data=root))
      root.bind('<<Test>>', handle_it)
      root.mainloop()
    2. gpolo commented on Jul 19, 2008

      gpolomannequin
      MannequinAuthor

      Actually, it could be the "detail" field too according to
      http://www.tcl.tk/man/tcl8.5/TkCmd/bind.htm#M24
      And this field may not exist, so I'm checking for that now.

      New patch added.

    3. dghjfrdj commented on Jan 31, 2011

      dghjfrdjmannequin
      Mannequin

      Hello,

      I read the proposed patch "event_generate__data2.diff" and the Tcl/Tk manual http://www.tcl.tk/man/tcl8.5/TkCmd/bind.htm#M24

      • Could you please also add a field "e.user_data" ? This would simply be a copy of 'd' :
        ---
      e.detail = d
      e.user_data = d

      My reasoning is that the Tcl/Tk manual mentions the two names "detail" and "user_data". However, "user_data" may often be preferred because it has a clear meaning, whereas "detail" is quite vague.

      • I did not understand why you try to get a widget reference from the "%d" field. Is it supposed to contain a widget name at some point ? According to the manual (and if I understood it well), it should never.

      Best regards,

      O.C.

    4. mark-summerfield commented on Jul 11, 2012

      mark-summerfieldmannequin
      Mannequin

      According to the Tcl/Tk docs the 'data' field is a string (i.e., for any user data) and the 'detail' field contains some internal data (so shouldn't be messed with); see http://www.tcl.tk/man/tcl8.5/TkCmd/event.htm#M16

      Anyway, I hope you add a data field for user created virtual events.

    5. dghjfrdj commented on Jul 11, 2012

      dghjfrdjmannequin
      Mannequin

      I don't agree with this comment.

      1. The 'detail' field also contains a string, one of the following: "NotifyAncestor", "NotifyNonlinearVirtual",...

      2. When an event is received, the 'detail' and 'user_data' fields are de facto mixed up. Indeed, the "%d" field contains "the detail or user_data field from the event".

      This information comes form the documentation I cited, http://www.tcl.tk/man/tcl8.5/TkCmd/bind.htm#M24 :

      • The "%d" field contains "the detail or user_data field from the event".
      • They are both strings:
      • "the %d is replaced by a string identifying the detail"
      • "For virtual events, the string will be whatever value is stored in the user_data field when the event was created (typically with event generate), or the empty string if the field is NULL"

      From the document cited in msg165234 (http://www.tcl.tk/man/tcl8.5/TkCmd/event.htm#M16), my understanding is:

      • For virtual events, the "data" string parameter given to "event generate" will be stored in the "user_data field" for the event. This string will then be available from the event through the "%d" substitution.

      • For events "Enter", "Leave", "FocusIn" and "FocusOut", the "detail" field will store a string among "NotifyAncestor", etc. This string will then be available from the event through the "%d" substitution.

      So, from the point of view of the guy who receives the event, the "%d" field can EITHER be a "detail" string like "NotifyAncestor" if event was "Enter"/"Leave"/"FocusIn"/"FocusOut" OR a "user_data" string in the case of a virtual event. It seems sensible that the Python interface provides both names. As a consequence, I think the patch should read:

      + # value passed to the data option is not a widget, take it
      + # as the detail field
      + e.data = None
      + e.detail = d
      + e.user_data = d

      I hope I understood the doc correctly.

    6. mkiever commented on Apr 22, 2018

      mkievermannequin
      Mannequin

      I have a patched Python 3.5.3 running mostly following
      the comments by O.C. If no one else is active on this
      I can try to prepare something for submission.

    7. serhiy-storchaka commented on Apr 22, 2018

      @serhiy-storchaka
      Member

      Fill free to create a pull request. It may need tests and documentation though.

    8. mkiever commented on May 29, 2018

      mkievermannequin
      Mannequin

      So I pulled, but it seems the CLA is stuck somewhere. Investigating...

    9. transferred this issue fromon Apr 10, 2022
    10. added
      stdlibStandard Library Python modules in the Lib/ directory
      on Nov 23, 2023
    11. ZelphirKaltstahl commented on Nov 15, 2025

      @ZelphirKaltstahl

      Any updates on this?

    12. added a commit that references this issue on Feb 25, 2026
    13. added a commit that references this issue on Feb 28, 2026
    14. added a commit that references this issue on Apr 25, 2026
    Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

    Metadata

    Metadata

    Assignees

    No one assigned

      Labels

      stdlibStandard Library Python modules in the Lib/ directorytopic-tkintertype-featureA feature request or enhancement

      Projects

      No projects

        Milestone

        No milestone

        Relationships

        None yet

        Development

        No branches or pull requests

        Issue actions