GeezerVison is showing github.com — Add support for the new data option supported by event generate (Tk 8.5) · Issue #47655 · python/cpython
Add support for the new data option supported by event generate (Tk 8.5) #47655Description
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']
Activitygpolo commented on Jul 18, 2008 MannequinAuthor More actions 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()gpolo commented on Jul 19, 2008 MannequinAuthor More actions dghjfrdj commented on Jan 31, 2011 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. mark-summerfield commented on Jul 11, 2012 mark-summerfieldmannequin 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. dghjfrdj commented on Jul 11, 2012 I don't agree with this comment.
-
The 'detail' field also contains a string, one of the following: "NotifyAncestor", "NotifyNonlinearVirtual",...
-
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. mkiever commented on Apr 22, 2018 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. serhiy-storchaka commented on Apr 22, 2018 Fill free to create a pull request. It may need tests and documentation though. mkiever commented on May 29, 2018 So I pulled, but it seems the CLA is stuck somewhere. Investigating... ZelphirKaltstahl commented on Nov 15, 2025 added a commit that references this issue on Feb 25, 2026gh-47655: Add support for user data and detail of Tk events to tkinter (
MetadataMetadataDevelopmentNo branches or pull requestsIssue actions
|